Skip to content

Decisions: 0206 Workspace tabs belong to the Organization; 0188 offers the personal space only on the personal Environment - #561

Open
immakermatty wants to merge 2 commits into
mainfrom
agent/DEV-6662-personal-space-start
Open

immakermatty wants to merge 2 commits into
mainfrom
agent/DEV-6662-personal-space-start

Conversation

@immakermatty

Copy link
Copy Markdown
Contributor

Why

Two decisions by Matěj (Organization Admin), made on 2026-10-16 after reviewing a prototype in the browser.

  1. 0206: the Organization defines the tabs in Workspace. A partner Organization's Owner proposed Work / Administration groups (Apps: hide selected auxiliary module tiles without removing repository slots Lazurio/LazurioPlatform#428, Retire Claude compatibility entrypoints when native instruction and skill discovery is proven #446). Matěj kept the idea and changed who owns it. The Organization names its own tabs ("Každodenní práce", "Finance", "Sklad") and places each module in one of them. Every member sees the same arrangement. The tabs do what Teams once tried to do in the UI, without being an access axis. Favourites stay the personal order.
  2. 0188 addendum: the personal space is offered only on the personal Environment. A local Folder that held an Organization showed "Osobní prostor tu ještě není · Připravit" and a tour step to prepare it. Matěj: a personal space is never created inside an Organization's Environment.

What changes

  • manual/decision-register.md: new row 0206 and a dated addendum to 0188. 0205 is reserved by Decisions: 0205 — a pull request to the Organization's Deployment Repo is the only change path for its Machines and Environments #560, so this takes the next free number.
  • Lazurio Core organization-settings-lib.mjs and lazurio.organization.v1.schema.json gain settings.workspace.tabs. The rule is "upstream first" (0194 point 6): Core reads the key before any consumer does.
    • The shape: 1–12 tabs; names of 1–40 characters, with no control characters and no space at either end; module ids as lazurio.module.v1 writes them.
    • Core also refuses duplicate names (ignoring case) and a module placed in two tabs. JSON Schema cannot express either rule.
    • manual/lazurio-manifest-family.md documents the key and its readers-first rule.
  • Tests that pin the list of effective keys now include workspace.tabs, which stays ungoverned in their fixtures. The schema-vs-Core parity test covers the new shapes.

What does not change

  • No Organization declares tabs yet. Until Core, the Dashboard and the LazurioPlatform release that read the key are out, an older reader would judge the whole settings section invalid and keep the settings it applied last.
  • 0194 is unchanged: the Dashboard stays the only writer of Organization settings.
  • The personal Environment's first run is unchanged. Work, Team and Automated Environments still never get a personal space.

Related

Verified

  • bun test on lazurio/core/organization-settings-lib, organization-activation-lib, organization-scaffold-lib and lazurio/organization-check-cli: 56 pass, 0 fail.
  • bun run pr:preflight: ok.

🤖 Generated with Claude Code

immakermatty and others added 2 commits October 16, 2026 19:08
Decision 0206 lets an Organization arrange its Workspace in Apps into tabs
it names itself. Lazurio Core's closed settings tree and the manifest
schema gain `settings.workspace.tabs`: 1 to 12 tabs in order, each a name
of 1 to 40 characters and the lazurio.module.v1 ids in it. Core also
refuses what the schema cannot express: two tabs of one name (letter case
ignored) and a module in two tabs. The whole list is one effective key.

Readers first: no Organization declares tabs until Core, the Dashboard and
the LazurioPlatform release that read them are out, because an older reader
judges the whole section invalid and keeps its last applied settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s the personal space only on the personal Environment

0206 (Matěj, 2026-10-16): inside Workspace the Organization names its own
tabs and places each module in one, the same for every member. One setting
in its repository (`settings.workspace.tabs`, decision 0194); a module in no
tab is in the first; the Owner arranges the tabs in the Dashboard, reached
from Apps' "Přesunout do karty" and "Upravit karty". Rejected: a per-browser
arrangement and a fixed Work / Administration pair.

0188 addendum: a personal space is never created inside an Organization's
Environment. The personal Environment offers it as before; the person's own
computer may hold one but no longer offers it next to its Organizations
(only `lazurio personalspace install` or an agent with consent); work, Team
and Automated Environments never have one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-16T17:12:47.717661Z ddf0c56 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

immakermatty added a commit to Lazurio/LazurioPlatform that referenced this pull request Oct 16, 2026
… 0206

The tab name pattern now matches Lazurio Core's and the manifest schema's
exactly (root decision 0206, HumanAndMachines/Lazurio#561): 1 to 40
characters, no control character and no whitespace at either end, so both
readers judge one section identically. F32's addendum and the shaping note
point to the root decision and the Core change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ddf0c56f0f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

// space, and the modules in it by their lazurio.module.v1 id.
// biome-ignore lint/suspicious/noControlCharactersInRegex: the control characters are what it refuses.
const WORKSPACE_TAB_NAME_PATTERN = /^(?=[^\u0000-\u001f\u007f]{1,40}$)[^\s\u0000-\u001f\u007f](?:.*[^\s\u0000-\u001f\u007f])?$/;
const WORKSPACE_MODULE_PATTERN = /^[a-z0-9][a-z0-9-]{0,62}$/;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove the extra module-ID length limit

When an Organization has a module ID longer than 63 characters, that module remains valid under the canonical lazurio.module.v1 contract (lazurio/schemas/lazurio-module.schema.json:9 and validateModuleManifest impose no maximum), but this new pattern rejects any tab containing it and invalidates the entire settings section. Reuse the canonical module-ID constraint here, or change the owning module contract consistently if a 63-character limit is required.

AGENTS.md reference: AGENTS.md:L224-L226

Useful? React with 👍 / 👎.

| 0202 | **Pracovní Prostředí Admina je správní stanoviště Organizace: z něj vede servisní SSH do Pracovních a Týmových Prostředí členů téže Organizace a správa jejího Conglomerate Hostu, přímo, bez laptopu.** Matěj (Organization Admin) 2026-10-15 po workshopu jedné Organizace; o totéž požádali Admini dalších Organizací. Navazuje na 0153, 0172, 0183 a 0192. Mění větu manuálu správy Ownery, že Pracovní Prostředí správní práva implicitně nezískává: pro výslovně jmenované Prostředí Admina je získává. (1) **Zdroj.** Jmenovitě deklarované Pracovní Prostředí člověka, který má živou roli Owner GitHub Organizace (v Lazuriu Organization Admin; v GitHub API role `admin`); „Owner nebo Admin“ v tomto rozhodnutí znamená tutéž jednu roli. Deklarace drží přesnou Mašinu: uzel tailnetu Organizace a jeho jedinou adresu. Agenti v tomto Prostředí jednají jménem toho člověka. Zdrojem nikdy není celý tag Organizace, Týmové ani Automatizované Prostředí, telefon ani zařízení jiného člověka. Role a identita uzlu se ověřují při každém nasazení. Když člověk roli ztratí, grant se odvolá změnou infra; průběžnou automatickou revokaci rozhodnutí neslibuje. (2) **Cíle.** Pracovní a Týmová Prostředí členů téže Organizace (servisní SSH pod účtem operátora Prostředí) a Conglomerate Host této Organizace (jmenovitý správní účet). Cílem nikdy není Osobní Prostředí ani jiná Organizace, a opačný směr do Prostředí Admina nevzniká. (3) **Personalspace do Pracovních Prostředí nepatří.** Leží výhradně v Osobním Prostředí uživatele, takže vstup Admina do Pracovního Prostředí otevírá jen pracovní záležitosti Organizace daného uživatele. Pracovní Prostředí, která dnes osobní prostor obsahují, se srovnají navazující prací. Do té doby Agent Admina cizí personalspace nečte (hranici drží proces). (4) **Přijaté riziko.** Kdo ovládne Prostředí Admina, dostane se do všech Pracovních a Týmových Prostředí jeho Organizace. Je to vědomá daň za správu. Přímé cesty omezují přesné granty Headscale na Prostředí téže Organizace; samotný tailnet izolaci dat negarantuje, protože jeden tailnet a jeden Conglomerate Host mohou obsluhovat víc Organizací (0192). Správu hostitele dostává jen Owner Organizace, která hostitel vlastní; když hostitel obsluhuje víc Organizací, ovládnutí jeho Prostředí zasáhne všechny tenanty hostitele, stejně jako dnes ovládnutí jeho laptopu. Privátní klíč zůstává v Prostředí Admina. (5) **Realizace.** Machines přijmou jmenované Pracovní Prostředí jako zdroj servisních a správních grantů Conglomerate Hostu a před nasazením ověří živou roli Owner (na GitHubu role `admin` organizace); infra repozitáře Organizací granty deklarují; manuál správy Ownery se upraví. **Dnes:** rozhodnuto, nenasazeno; změna Machines a nasazení v Organizacích jsou navazující práce. |
| 0203 | **Trezory podle Organizací: každá Organizace má vlastní Lazurio Vaultwarden, člověk do něj vstupuje pod uživatelským jménem svého Lazurio účtu a osobní Prostředí používají vlastní Bitwarden.** Matěj (Organization Admin) 2026-10-15 po rozboru architektury trezorů, dokud trezor používají jen pilotní uživatelé; plán DEV-6631. Navazuje na 0091, 0153, 0154, 0172, 0192, 0197 a 0198. (1) **Lazurio Vaultwarden každé Organizace.** Conglomerate Host provozuje pro každou Organizaci, kterou obsluhuje, vlastní instanci Lazurio Vaultwardenu na adrese `vaultwarden.<GitHub login Organizace>.lazurio.io`, s vlastní databází, zálohou, aktualizacemi a přihlašovacím klientem v Lazurio Auth; dostupná je jen z tailnetu sítě (0197 bod 11). Účet člověka v trezoru tak patří jedné Organizaci a v rozšíření Bitwarden má člověk účet pro každou Organizaci; jeden profil prohlížeče unese nejvýš pět účtů, další profil dalších pět. Účty se v rozšíření liší adresou serveru, proto ji nese jméno Organizace. Trezory Prostředí (0198 bod 1) leží ve Vaultwardenu své Organizace a zkratku Organizace v názvu nenesou: „<jméno Prostředí> <login>“, u týmového Prostředí jen jeho jméno. Instance Organizace se stěhuje celá, nikdy kopií databáze do další běžící instance: klienti Bitwardenu by kopii považovali za tentýž server a účty by si přepisovali. (2) **Hranicí je Conglomerate.** Organizace jednoho Conglomerate jsou spřátelené firmy se společným Headscale a tvoří jednu bezpečnostní hranici. Lazurio Auth proto do Vaultwardenu kterékoli z nich pustí člena kterékoli Organizace, kterou síť obsluhuje, jako dosud; co člověk uvidí, určují jen trezory, do kterých je pozván. Kdo odejde z jedné Organizace a zůstane v okruhu, se do jejího Vaultwardenu dál přihlásí, ale vidí jen to, co mu někdo výslovně nasdílel; z trezorů Prostředí ho Prostředí po ztrátě přístupu odebere samo (0198 bod 2). (3) **Trezor Organizace.** Každý Vaultwarden Organizace má jeden Trezor Organizace pro hesla, která si lidé sdílejí mezi sebou, v kolekcích, jak je ve Vaultwardenu běžné. Ownerem je Admin Organizace jako člověk, nikdy technický účet, aby k němu provozovatel hostu neměl klíč; jako Owner si zpřístupní všechno, což je vědomý rozdíl proti trezorům Prostředí. Členy zve a potvrzuje Admin, i lidi ze spřátelených Organizací. Účty Prostředí v něm nikdy nejsou: kolekce jsou ve Vaultwardenu oprávnění serveru, ne samostatné šifrování, takže by agenti drželi klíč ke všem firemním heslům; co má dostat agent, zkopíruje člověk do trezoru Prostředí. Při odchodu člověka z Organizace ho z Trezoru Organizace odebere Admin a Dashboard mu to připomene, aniž by trezor viděl. Web trezoru, vlastní build Lazurio Vaultwardenu, Admina správou provede, aby se v ní neztrácel. Co Organizace přiděluje Prostředím (0198 bod 8), zůstává otevřené a zvlášť. (4) **Uživatelské jméno Lazurio účtu.** Každý Lazurio účet má jedno uživatelské jméno: malými písmeny, jedinečné, nikdy se nemění a nikdy se nepřidělí znovu, ani po smazání účtu. S připojeným GitHubem je to GitHub login z prvního přihlášení. Bez GitHubu si ho člověk zvolí tak, aby na GitHubu neexistovalo ani jako uživatel, ani jako organizace, a jména se s GitHubem co nejméně překrývala; Lazurio mu doporučí si ho na GitHubu zarezervovat založením účtu. Patří-li GitHub login už jinému Lazurio účtu (po přejmenování na GitHubu), zvolí si člověk jiné jméno podle stejného pravidla. Existující účty dostanou svůj zmrazený GitHub login. Jméno vydává Lazurio Auth a je jediným jménem člověka všude: v adrese trezoru, v Headscale i jako osobní DNS slug (0153). Prostředí ho dostává od přihlášení jako ověřený údaj, nikdy ho neskládá z GitHubu. (5) **Adresa Lazurio účtu.** Adresa člověka ve Vaultwardenu je `<uživatelské jméno>@account.lazurio.ai`. Je to identifikátor, nikdy schránka: doména má záznam „null MX“ a nikdy to není `@lazurio.ai`. Mimo trezor ji smí dostat jen aplikace za Lazurio přihlášením, která e-mail jako přihlašovací jméno vyžaduje, a každá vědomě; nikdy neslouží jako kontakt pro poštu. Vaultwarden z adresy odvozuje šifrování hlavního hesla, proto se adresa ani jméno nemění. Technické účty Prostředí zůstávají `vaultwarden-<náhodný kód>@<adresa Prostředí>` (0197 bod 3), protože jejich adresa je zároveň jednorázové pověření k registraci. (6) **Agenti beze změny.** Prostředí si účet zaregistruje samo s náhodným hlavním heslem, které nezná žádný člověk, a s API klíčem; obojí leží jen v Prostředí. Přihlašuje se API klíčem, dešifruje uloženým heslem a drží jednu odemčenou relaci pro všechny své agenty; cílově stejným účtem přihlásí i rozšíření v prohlížeči Prostředí (0197 bod 7). Agenti nikdy nepoužívají účet ani heslo člověka. (7) **Osobní Prostředí s vlastním Bitwardenem.** Osobní Prostředí nepatří žádné Organizaci, proto nepoužívá Lazurio Vaultwarden: člověk mu připojí Bitwarden podle své volby, typicky bezplatný Bitwarden jako službu (bitwarden.eu nebo bitwarden.com). Agenti vždy dostanou vlastní účet, nikdy hlavní účet člověka, a to ve stejné službě a regionu jako účet člověka, protože organizaci mezi regiony sdílet nejde; trezorem osobního Prostředí je bezplatná organizace Bitwardenu pro dva, člověka a účet agentů. Kdo Bitwarden nemá, tomu návod doporučí bitwarden.eu. Služba při registraci ověřuje e-mail, takže účet agentů založí člověk, vytvoří mu API klíč a jednou ho vyplní v Nastavení → Trezor, stejně jako odpověď na žádost o tajemství; dál Prostředí postupuje samo, založí si trezor a pozve do něj člověka. Přihlášení API klíčem služba neověřuje kódem z e-mailu. Ochrana „jen z tailnetu“ tu neplatí; je to volba člověka. Jak Bitwarden připojit, lidem vysvětlí motion grafika. Výhledově mají být osobní Prostředí dostupná primárně bez tailnetu, jen za Lazurio Auth; to mění 0154 a rozhodne se samostatně. (8) **Přechod bez migrace dat.** Trezor zatím používají jen pilotní uživatelé, proto se přechází načisto: dosavadní trezor sítě zůstane Vaultwardenem Organizace, jejíž adresu nese, nebo se přestaví načisto, a ostatní Organizace sítě dostanou nové instance. Lidé se přihlásí znovu pod novou adresou a své položky si převedou sami. Dokud Auth nevydává uživatelská jména, lidé se do trezorů nezvou, aby nevznikaly adresy, které by se musely měnit. **Mění:** 0197 bod 2 (adresu `<ID Lazurio účtu>@vaultwarden-identity.lazurio.ai` nahrazuje `<uživatelské jméno>@account.lazurio.ai`), 0197 body 2 a 11 a 0198 bod 3 (trezor sítě s jedním účtem člověka na síť nahrazuje Vaultwarden každé Organizace s účtem člověka pro každou Organizaci; tailnet zůstává), 0197 bod 5 a 0198 bod 4 (osobní Prostředí místo trezoru sítě používá vlastní Bitwarden), 0198 bod 1 (název trezoru Prostředí bez zkratky Organizace), 0198 bod 2 (Trezor Organizace pro hesla lidí existuje; role dál nedává přístup do trezorů Prostředí) a 0153 (osobní DNS slug je uživatelské jméno Lazurio účtu). Kde 0193, 0197 nebo 0198 mluví o trezoru či Vaultwardenu sítě, platí Vaultwarden Organizace, u osobního Prostředí jeho vlastní Bitwarden. **Nemění:** 0197 body 1, 3, 4, 7 až 10 a 12, 0198 body 5 až 9, vstup podle 0192 a soukromí Personalspace (0091). **Stav:** cíl. Implementaci vlastní plán DEV-6631: Lazurio Auth (uživatelské jméno, adresa a klient pro každý Vaultwarden), Machines (Vaultwarden pro každou Organizaci), LazurioPlatform (Správci podle uživatelského jména, osobní Prostředí s vlastním Bitwardenem) a `Lazurio/vaultwarden` (web, který Admina provede). |
| 0204 | **LazurioExampleOrganization je veřejná referenční Organizace Lazuria: její Prostředí jsou na vlastním serveru dostupná bez tailnetu, vyzkoušet je může každý Lazurio účet a je první vlnou každého rolloutu, kde rollouty a restarty nepotřebují souhlas.** Matěj (Organization Admin) 2026-10-16; plán DEV-6668. Navazuje na 0146, 0172, 0181, 0192, 0194 a 0201. (1) **Rozsah.** Platí jen pro GitHub Organizaci `LazurioExampleOrganization` (id 325048785), Mašiny, které vlastní, a jejich Prostředí. Jiná Organizace se na toto rozhodnutí nesmí odvolávat ani ho rozšiřovat; další veřejná Organizace potřebuje vlastní rozhodnutí. Organizace drží jen fiktivní data a veřejné repozitáře; jedinou výjimkou je její soukromé Deployment Repo (bod 8). Nemá v Gitu žádné tajemství, žádná data skutečných lidí ani klientů a nic, co sahá do jiné Organizace. (2) **Veřejný vstup bez tailnetu.** Organizace má vlastní dedikovaný server. Její Prostředí jsou dostupná přes veřejné HTTPS vlastním veřejným vstupem Organizace na tomto serveru, bez Tailscale/Headscale a bez schvalování zařízení. Jména leží ve veřejném DNS ve vlastní delegované zóně Organizace a certifikáty vydává vlastní služba DNS-01 Organizace. Žádná z jejích Mašin není v žádném tailnetu. Všechny ostatní Organizace drží 0146, 0184 a 0192 beze změny. (3) **Kdo smí kam.** Prostředí pro návštěvníky pouštějí každý přihlášený Lazurio účet bez členství, pozvánky a grantu v Auth, s plným přístupem do Prostředí na jedno použití; vyzkoušení nabízí Dashboard každému přihlášenému účtu. Návštěvník se nikdy nestává členem Organizace ani spolupracovníkem na GitHubu. Všechna ostatní Prostředí Organizace se řídí 0192 bez její síťové podmínky: členství a výslovný grant zůstávají povinné a návštěvníci do nich grant nedostanou. Zda je Organizace veřejná, určuje platforma (Dashboard a Machines), nikdy nastavení Organizace samotné (0194). (4) **Prostředí na jedno použití.** Organizace ani provozovatelé nedávají Prostředí pro návštěvníky žádné přihlášení: žádný trezor, žádné Integrace, žádné předplatné AI a žádnou schopnost zápisu na GitHubu; nic z jiné Organizace v nich není. Odchozí provoz omezuje allowlist. Prostředí pro návštěvníky jsou dvojí. *Sdílené Prostředí* pouští současně každý přihlášený účet: návštěvníci v něm vidí a mohou měnit práci jeden druhého, což je vědomě přijaté riziko prvního sdíleného Prostředí. Vstup to předem řekne a zakáže do něj přihlašovat vlastní účty a zadávat osobní údaje; nejméně jednou za noc se vrací do stavu posledního reviewovaného nasazení a jeho vstupní tajemství vzniknou znovu. *Prostředí návštěvníka* má vždy jen jeden účet. Dalšímu se předá až po dokončeném návratu do stavu posledního reviewovaného nasazení s novými vstupními tajemstvími; když návrat selže, zůstane zavřené. Jen sem smí návštěvník přihlásit vlastní účet GitHubu nebo vlastní předplatné AI. Jsou to jeho přihlášení s jeho oprávněními a na jeho riziko, včetně toho, kam jeho účet sahá mimo tuto Organizaci; Organizace je nijak nerozšiřuje, vidět je mohou i provozovatelé Organizace, vstup to předem řekne a návrat po relaci je smaže. Kterékoli Prostředí i celý server lze kdykoli nasadit znovu od nuly. Zahazuje se tím stav Prostředí; není to rollback vydání, takže 0166 platí beze změny. (5) **GitHub.** Organizace dává Prostředím pro návštěvníky na GitHubu jen schopnost ke čtení; vlastní účet návštěvníka smí být jen v Prostředí návštěvníka podle bodu 4. Výchozí větve všech repozitářů Organizace chrání rulesety bez výjimky pro Lazurio for GitHub. (6) **AI.** Návštěvník nikdy nedostane sdílené předplatné ani AI pool (0181 zůstává jen pro členy). Dokud neexistuje brána s rozpočtovým stropem, AI není, nebo si návštěvník přinese vlastní předplatné do Prostředí návštěvníka podle bodu 4. Pozdější model se platí klíčem s pevným stropem, který se nikdy nedostane do Prostředí pro návštěvníky. (7) **První vlna každého rolloutu.** Organizace je prvním cílem každého rolloutu sdíleného softwaru Lazuria: Machines, LazurioPlatform, forků T3 Code a Lazurio MausBot a změn Auth nebo Dashboardu ve vstupu do Prostředí. Netýká se sdílené řídicí vrstvy (vydavatel Auth, nasazení Dashboardu, Headscale a Vaultwarden Conglomerate Hostu) ani vstupu přes tailnet, které tato Organizace nemá; ty si drží dosavadní brány. *Bez souhlasu:* rollouty, restarty, reinstalace a nová nasazení jejích Mašin a Prostředí, včetně předběžných kandidátů, nepotřebují souhlas lidí, kteří tato Prostředí používají, ani okno. Provádí je Agent jako součást vydání na pokyn svého Operátora, který má v této Organizaci živou roli Admin, a v jeho právech; Agent tím žádnou vlastní pravomoc nezískává. *Zůstává:* pokyn Operátora, review zdrojů sdílených repozitářů, brány životního cyklu Machines (sloučený záměr s Permitem, nebo zveřejněný canary marker), schvalování vydání, zákaz tajemství v Gitu a vlastní souhlas každé jiné Organizace. *Akceptace před další vlnou:* rollout postoupí do další vlny až po akceptaci v prohlížeči na této Organizaci (0178). (8) **Deployment Repo zůstává soukromé jako všude.** Deployment Repo Organizace je samostatný soukromý repozitář uvnitř Organizace (např. `LazurioExampleOrganization/machines`), takže brány Machines pro něj platí beze změny. Veřejný repozitář `infra` drží jen veřejnou dokumentaci. Přístupové údaje a soukromé vstupy zůstávají v custody mimo Git. (9) **Beze změny:** 0153/0154 (na tomto serveru neběží žádná osobní Mašina a žádná osobní Mašina není dosažitelná mimo tailnet svého Ownera), 0091 Personalspace, 0172 plný přístup (proto je každé Prostředí pro návštěvníky samostatná Mašina oddělená od ostatních Prostředí Organizace), GitHub jako autorita repozitářových schopností a Auth jako autorita účtů. **Vztah k dřívějším rozhodnutím, jen pro tuto Organizaci:** 0146: jména dílen jsou veřejně dostupná vlastním vstupem Organizace, bez split DNS Conglomerate Hostu a bez fail-closed produkční brány pro labely VM, a DNS-01 běží na vstupu Organizace, ne na Conglomerate Hostu. 0154 a 0184 se na Organizaci nerozšiřují a Headscale v ní není; pro osobní Mašiny platí 0154 beze změny. 0192: podmínka Tailscale a zařízení schváleného Adminem neplatí pro žádné Prostředí Organizace a Prostředí pro návštěvníky pouštějí nečleny bez grantu, tedy veřejnou cestou i lidi mimo Organizaci. 0181 bod 1: na dedikovaném serveru Organizace je jedna servisní Mašina pro veřejný vstup; AI pool návštěvník nikdy nedostane. 0203: Organizace nemá Conglomerate Host, a proto ani Lazurio Vaultwarden. 0157: výjimka nativního párování T3 se nepoužívá, každý požadavek T3 prochází admission. 0201: Prostředí pro návštěvníky mají ukázkový onboarding bez kroku „nejdřív AI“. Praxe rolloutů se souhlasem lidí, kteří Prostředí používají, a s oknem ustupuje bodu 7; review zdrojů a brány vydání zůstávají. Záznam canary v LazurioPlatform dál vyžaduje jedno osobní Prostředí mimo tuto Organizaci, protože tato Organizace osobní Prostředí nemá; pracovní Prostředí do něj dodává ona. **Provedení:** plán DEV-6668: server a soukromé Deployment Repo, delegovaná DNS zóna, vstupní Mašina a první sdílené Prostředí s nočním resetem, vstup přes Auth a Dashboard, později Prostředí návštěvníka a brána AI. Postupy vydání Machines, LazurioPlatform, T3 Code a MausBot uvedou tuto Organizaci jako první vlnu. **Dnes:** rozhodnuto, nenasazeno. |
| 0206 | **Karty ve Workspace určuje Organizace: jedno nastavení v jejím repozitáři, stejné pro všechny členy, které upravuje Owner v Dashboardu.** Matěj (Organization Admin) 2026-10-16 po návrhu Ownera partnerské Organizace (Lazurio/LazurioPlatform#428 a #446) a prohlídce prototypu; provedení Lazurio/LazurioPlatform#467 (dodatek F32 z 2026-10-16). Navazuje na 0179 (dodatek o dvou sekcích), 0185 bod 5 a 0194. (1) **Co člověk vidí.** Apps mají dál sekce Workspace a Productionspace. Organizace si ve Workspace může pojmenovat vlastní karty, například „Každodenní práce“, „Finance“ nebo „Sklad“, a každý Modul zařadit do jedné z nich. Rozdělení je stejné pro všechny členy. Dělá to, co dřív v rozhraní zkoušely Teamy, ale s Teamy ani s přístupy nesouvisí. Vlastní pořadí člověka zůstávají Oblíbené v levém sloupci. (2) **Jedna pravda.** Karty jsou nastavení Organizace `settings.workspace.tabs` v `lazurio.organization.json` jejího repozitáře (0194 bod 1): karty v pořadí, každá se jménem a Moduly podle id. Nejvýš 12 karet, jméno má 1 až 40 znaků, dvě karty nemají stejné jméno a Modul je nejvýš v jedné kartě. Neplatné nastavení neplatí celé a Workspace zůstane jedním seznamem. Pole v `modules.manifest.json`, databáze Dashboardu ani nastavení v prohlížeči nevznikají. (3) **První karta drží zbytek.** Modul, který Organizace nikam nezařadila, i každý nový Modul je v první kartě; tam zůstává i „+ Nový modul“. Karta, která na tomto Prostředí nemá žádný Modul, se neukáže, a méně než dvě karty znamenají Workspace bez karet. Moduly, které Prostředí nemá, zůstávají skryté (LazurioPlatform F32, dodatek z 2026-10-15). (4) **Upravuje Owner v Dashboardu.** Kde živá odpověď GitHubu říká, že identita Prostředí je Owner Organizace, nabídnou Apps v nabídce dlaždice „Přesunout do karty“ a vedle karet „Upravit karty“. Obojí otevře Moduly Organizace v jejím Dashboardu, který změnu zapíše právy Ownera a přečte zpět (0194 bod 2); Apps nic nezapisují. Agent může změnu navrhnout pull requestem. (5) **Texty.** Karty nesou jen svá jména, bez počtů a vysvětlivek. **Pořadí zavedení:** Lazurio Core (`organization-settings-lib.mjs` a schéma manifestu), vydání LazurioPlatform a Dashboard (ověření, doručení a editor). Dřív žádná Organizace karty nedeklaruje, protože starší čtenáři by celou sekci nastavení považovali za neplatnou a nechali by poslední použité nastavení. Doručení přes bránu Prostředí (LazurioPlatform F45), díky kterému se změna ukáže do několika minut a ne až po další synchronizaci obsahu, přijde jako další krok. **Vztah k dřívějším rozhodnutím:** 0179 (dodatek o dvou sekcích) a 0185 bod 5 se doplňují o karty uvnitř Workspace; 0194 beze změny. **Zamítnuto:** rozdělení podle člověka v prohlížeči (Lazurio/LazurioPlatform#446) a pevná dvojice Práce / Správa. |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reconcile the invalid-tab fallback behavior

When valid tabs were previously applied and a later manifest contains malformed tabs, this new decision promises that Workspace becomes one list, while the settings consumer contract in manual/lazurio-manifest-family.md:194 explicitly requires consumers to keep the last applied version for any invalid section; Core returns exactly that undifferentiated status. Consequently the old tabs remain instead of the documented one-list fallback, so the decision and consumer contract need one authoritative failure behavior.

AGENTS.md reference: AGENTS.md:L224-L226

Useful? React with 👍 / 👎.

immakermatty added a commit to Lazurio/LazurioPlatform that referenced this pull request Oct 19, 2026
…browser groups) (#467)

* Apps: group Workspace modules into Work and Administration

* Keep the selected Workspace tab while the account loads

* Apps: an Organization's own Workspace tabs, one setting of its root

Matěj decided (F32 addendum of 2026-10-16) that the Organization, not each
browser, arranges its Workspace: `settings.workspace.tabs` of the root's
lazurio.organization.json names the tabs in order and the modules in each,
the same for every member. A module in no tab is in the first; a tab with
nothing on this Environment is left out; fewer than two tabs show the plain
Workspace. The catalog reads the tabs with the Organization, so the CLI,
the Launchpad and agents see one arrangement.

Only the Organization's Owner (GitHub's live answer) gets "Přesunout do
karty" in a tile's menu and "Upravit karty" beside the tabs; both open the
Organization's modules in its Dashboard, the settings writer of root
decision 0194. The Launchpad writes nothing.

This replaces the browser-local Work / Administration groups of the first
two commits (their storage, account login and menu move) and keeps their
tabs pattern: WAI-ARIA tabs, arrows/Home/End, focus kept across redraws.
Tabs carry names only. The preview gains `workspace-tabs`.

Co-Authored-By: MCN-Kacanos-M <284052013+MCN-Kacanos-M@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Settings: the tab name pattern is Lazurio Core's; decisions name root 0206

The tab name pattern now matches Lazurio Core's and the manifest schema's
exactly (root decision 0206, HumanAndMachines/Lazurio#561): 1 to 40
characters, no control character and no whitespace at either end, so both
readers judge one section identically. F32's addendum and the shaping note
point to the root decision and the Core change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Apps: Workspace tabs as the column's Chat · Apps · Automate switch, the flag flush on its rule

Matěj decided on the wireframe (prototypes-lazurio#73, 2026-10-19) that the
Organization's Workspace tabs are the same segmented switch as the column
head's Chat · Apps · Automate, at the right end of the Workspace head 6 px
above the blue rule, with "Upravit karty" right after it, while the
"Workspace" flag stays flush on the rule with no gap under it.

The switch reuses `nav.switch` / `.tab` of src/shell/styles.ts: 3 px around,
2 px between, radius-md and its inner corner, weight 550, the shown tab
raised on a hairline, in the page roles the shell's colour roles stand for on
the Launchpad (--hover, --card, --border, --fg, --muted-fg, --link), so the
computed styles equal the column's switch under every theme. The head aligns
its parts to its bottom edge and wraps in reverse: a switch that does not fit
beside the flag takes a line above it, never between the flag and its rule.
Keyboard (arrows, Home, End), WAI-ARIA roles and Productionspace are as they
were.

`appsSectionHead` gives the head's parts in order (flag first, then the
switch with "Upravit karty", or the count) and is tested; the geometry was
checked headless at 1440, 900 and 375 px in cs and en. F32 gains a dated
addendum; the shaping note records the wireframe's personal-Workspace tabs
(2026-10-17) as an open step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: MCN-Kacanos-M <284052013+MCN-Kacanos-M@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

@agentrozjedemeai agentrozjedemeai left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update the full Core reader test for the new effective key and rerun the required checks. lazurio/core/organization-root-reader-lib.test.mjs:108 still expects only the previous keys, while readOrganizationSettings now returns an additional ungoverned workspace.tabs entry. I reproduced the failure locally with bun test lazurio/core/organization-root-reader-lib.test.mjs; it also makes bun run check fail in the Ubuntu CI job. This leaves the required check red for this head.

— Pablo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants