diff --git a/.github/workflows/lazurio-fork-ci.yml b/.github/workflows/lazurio-fork-ci.yml index ee829056af00b..9e225acbf7a96 100644 --- a/.github/workflows/lazurio-fork-ci.yml +++ b/.github/workflows/lazurio-fork-ci.yml @@ -66,7 +66,8 @@ jobs: # design system's light look, root decision 0200, whose one stylesheet is # apps/web/src/lazurio/theme.css), ChatView.tsx (update notice, Environment # browser), RightPanelTabs.tsx and rightPanelStore.ts (Environment browser, Nová - # karta). + # karta), sidebar/SidebarChrome.tsx (the shell's column head under every sidebar's + # top row, and the name in the app). apps/server/src/cli/config.ts apps/server/src/config.ts apps/server/src/environment/ServerEnvironment.ts @@ -75,6 +76,7 @@ jobs: apps/web/index.html apps/web/src/components/ChatView.tsx apps/web/src/components/RightPanelTabs.tsx + apps/web/src/components/sidebar/SidebarChrome.tsx apps/web/src/main.tsx apps/web/src/rightPanelStore.ts # Hosted configuration: T3CODE_CLIENT_SESSION_TTL, T3CODE_EXTERNAL_ORIGIN (a @@ -124,12 +126,6 @@ jobs: # text across upstream's reload after pairing, and the chat layout opens it as an # unsent draft. apps/web/src/routes/_chat.tsx - # The Lazurio shell slot (issue #33): the loader, the rail, the padding and - # Buddy in index.html, and the column head at the top of the sidebar, measured - # with upstream's observeResize. The shell itself is served by the Environment's - # Launchpad; without it nothing renders. index.html also maps T3's sidebar tokens - # to the shell's colour roles. - apps/web/src/components/AppSidebarLayout.tsx # The name in the app (root decision 0200): T3 Code (Lazurio), from the stage # label of the distribution's builds (Lazurio where upstream says Beta), with the # label beside the wordmark in the sidebar, the page title in index.html and the @@ -139,7 +135,6 @@ jobs: apps/web/src/branding.logic.ts apps/web/src/branding.test.ts apps/web/src/branding.ts - apps/web/src/components/sidebar/SidebarChrome.tsx # The Environment browser (root decision 0191, plan DEV-6646, LazurioPlatform F47): # a thread's agents get its agent-browser session, Codex's through the thread's # config (CodexAdapterV2.ts, whose test expects it) and the others' through the diff --git a/apps/web/src/components/AppSidebarLayout.tsx b/apps/web/src/components/AppSidebarLayout.tsx index aa5d1e9fc25c2..fd56ee8ca5ac9 100644 --- a/apps/web/src/components/AppSidebarLayout.tsx +++ b/apps/web/src/components/AppSidebarLayout.tsx @@ -1,8 +1,6 @@ import { useAtomValue } from "@effect/atom-react"; import * as Schema from "effect/Schema"; import { - createElement, - useCallback, useEffect, useState, useSyncExternalStore, @@ -21,7 +19,6 @@ import { import { isEditableFocused } from "../lib/editableFocus"; import { isPreviewFocused } from "../lib/previewFocus"; import { isTerminalFocused } from "../lib/terminalFocus"; -import { observeResize } from "../lib/observeResize"; import { isModelPickerOpen } from "../modelPickerVisibility"; import { selectActiveRightPanel, useRightPanelStore } from "../rightPanelStore"; import { selectThreadTerminalUiState, useTerminalUiStateStore } from "../terminalUiStateStore"; @@ -83,7 +80,7 @@ function readInitialThreadSidebarWidth(): number { } } -function SidebarControl({ lazurioColumnHeadHeight }: { lazurioColumnHeadHeight: number }) { +function SidebarControl() { const usagePageOpen = useLocation({ select: (location) => location.pathname === "/usage" }); const keybindings = useAtomValue(primaryServerKeybindingsAtom); const { toggleSidebar, isMobile, mobileSheetMounted } = useSidebar(); @@ -148,12 +145,6 @@ function SidebarControl({ lazurioColumnHeadHeight }: { lazurioColumnHeadHeight: isMobile && mobileSheetMounted && "hidden", )} data-sidebar-control="" - // Lazurio shell: the open sidebar's top row sits below the column head, and so does its toggle. - style={ - isSidebarVisible && !isMobile && lazurioColumnHeadHeight > 0 - ? { top: `calc(var(--workspace-controls-top) + ${lazurioColumnHeadHeight}px)` } - : undefined - } > { - if (!element) return; - const stop = observeResize(element, () => setLazurioColumnHeadHeight(element.offsetHeight)); - return () => { - stop(); - setLazurioColumnHeadHeight(0); - }; - }, []); const [isWindowFullscreen, setIsWindowFullscreen] = useState(() => { const getWindowFullscreenState = window.desktopBridge?.getWindowFullscreenState; return isMacosDesktop && typeof getWindowFullscreenState === "function" @@ -358,8 +339,6 @@ export function AppSidebarLayout({ children }: { children: ReactNode }) { // The narrow-window sidebar is a sheet, portaled outside the provider's styles. style={windowControlsInsetStyle} > - {/* Lazurio shell (docs/operations/lazurio-fork-release.md): the Environment picker and the app switch, above the upstream top row. Undefined, it renders nothing. */} - {createElement("lazurio-column-head", { active: "chat", ref: observeLazurioColumnHead })} {isOnSettings ? ( <> @@ -373,7 +352,7 @@ export function AppSidebarLayout({ children }: { children: ReactNode }) { {children} - + diff --git a/apps/web/src/components/sidebar/SidebarChrome.tsx b/apps/web/src/components/sidebar/SidebarChrome.tsx index aa10a077205e2..c2620e606753e 100644 --- a/apps/web/src/components/sidebar/SidebarChrome.tsx +++ b/apps/web/src/components/sidebar/SidebarChrome.tsx @@ -1,6 +1,6 @@ import { ArrowLeftIcon, ChartNoAxesColumnIcon, SettingsIcon } from "lucide-react"; import type { ReactNode } from "react"; -import { memo, useCallback } from "react"; +import { createElement, memo, useCallback } from "react"; import { Link, useLocation, useNavigate } from "@tanstack/react-router"; import { useEnvironmentIdentificationMode } from "../../hooks/useSettings"; @@ -14,6 +14,7 @@ import { useEnvironmentStageLabel, } from "../SidebarStageBackdrop"; import { Badge } from "../ui/badge"; +import { LazurioBadge } from "../../lazurio/LazurioBadge"; import { SidebarFooter, SidebarMenu, @@ -31,7 +32,7 @@ import { SidebarUpdateArchitectureWarning, SidebarUpdatePill } from "./SidebarUp import { PullRequestGlyph } from "~/components/pullRequest/pullRequestIcons"; import { observeResize } from "~/lib/observeResize"; -export const SidebarChromeHeader = memo(function SidebarChromeHeader({ +const SidebarChromeTitlebar = memo(function SidebarChromeTitlebar({ isElectron, }: { isElectron: boolean; @@ -74,9 +75,13 @@ export const SidebarChromeHeader = memo(function SidebarChromeHeader({ {pillLabel ? (
- - {pillLabel} - + {pillLabel === "Lazurio" ? ( + + ) : ( + + {pillLabel} + + )}
) : null} @@ -84,6 +89,20 @@ export const SidebarChromeHeader = memo(function SidebarChromeHeader({ ); }); +// Lazurio shell (docs/operations/lazurio-fork-release.md): every sidebar's top row, with its toggle +// and the wordmark, has the column head under it: the Environment picker and the app switch. +// Undefined, the element renders nothing. +export const SidebarChromeHeader = memo(function SidebarChromeHeader(props: { + isElectron: boolean; +}) { + return ( + <> + + {createElement("lazurio-column-head", { active: "chat" })} + + ); +}); + // Measures the brand at its titlebar inset, plus the header's right padding and the // sidebar border, so the sidebar minimum follows font size, zoom and macOS window controls. export function SidebarBrandWidthProbe({ diff --git a/apps/web/src/lazurio/LazurioBadge.tsx b/apps/web/src/lazurio/LazurioBadge.tsx new file mode 100644 index 0000000000000..2f66f37c8b1d8 --- /dev/null +++ b/apps/web/src/lazurio/LazurioBadge.tsx @@ -0,0 +1,22 @@ +import symbol from "./brand/symbol-color.svg"; +import symbolDark from "./brand/symbol-color-dark.svg"; + +/** + * Lazurio overlay (root decision 0200): the "Lazurio" label beside T3 Code's wordmark, with the + * approved Lazurio symbol before the word (the approved design of the left column, 2026-10-17). + * The symbol is the design system's whole asset, never redrawn, at its 16 px minimum (logo.md), + * so the label is taller than T3's small badge; on a dark look it is the dark rendition, as + * blue-500 vanishes on dark ground. The colours and the type are T3's secondary badge. + */ +export function LazurioBadge() { + return ( + + + + Lazurio + + ); +} diff --git a/apps/web/src/lazurio/brand/README.md b/apps/web/src/lazurio/brand/README.md new file mode 100644 index 0000000000000..91242fcf2a07b --- /dev/null +++ b/apps/web/src/lazurio/brand/README.md @@ -0,0 +1,7 @@ +# Lazurio brand assets + +`symbol-color.svg` and `symbol-color-dark.svg` are the Lazurio symbol for light and dark ground, +copied unchanged from the Lazurio design system (`content/brand/logo/`, at `22265ef2`). The logo +manual allows only the whole approved asset: never edit, redraw or recolour these files. To update +them, copy the new approved files over these. LazurioPlatform vendors the same light symbol in +`src/shell/vendor/lazurio/`. diff --git a/apps/web/src/lazurio/brand/symbol-color-dark.svg b/apps/web/src/lazurio/brand/symbol-color-dark.svg new file mode 100644 index 0000000000000..17081a67fd4cc --- /dev/null +++ b/apps/web/src/lazurio/brand/symbol-color-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/web/src/lazurio/brand/symbol-color.svg b/apps/web/src/lazurio/brand/symbol-color.svg new file mode 100644 index 0000000000000..7e3a8b4d7618d --- /dev/null +++ b/apps/web/src/lazurio/brand/symbol-color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/operations/lazurio-fork-release.md b/docs/operations/lazurio-fork-release.md index 78ac757929ac9..54f19001c8799 100644 --- a/docs/operations/lazurio-fork-release.md +++ b/docs/operations/lazurio-fork-release.md @@ -124,7 +124,7 @@ Lazurio/t3code#70. | 4 | `feat: in-app update from the configured release channel` | `T3CODE_RELEASE_REPOSITORY` a server-advertised `availableServerUpdate`: Mašina nabízí aktualizaci na nejvyšší vydání z nastaveného repozitáře a instaluje ho tlačítkem Update. Server pod launcherem po aktivaci přesměruje `~/.local/bin/t3` na svůj runtime, takže CLI běží ve stejné verzi jako server (Lazurio/t3code#30). Navrženo upstreamu. | Upstream má dál pevné `pingdotgg/t3code` a protokol launcheru 3; „update everything“ (#18053) míří na verzi klienta z npm a overlay ho nezapojuje: zůstává celý. Přesměrování `t3` je nové: Update tlačítkem přesune jen aktivní verzi launcheru a CLI staré verze by na v0.1.0 zapisoval párování do `state.sqlite`, zatímco server čte `statev2.sqlite`. Nabídnout upstreamu. | | 5 | `release: Lazurio distribution` | Tento runbook, [specifikace overlaye](./lazurio-overlay.md), skill [`lazurio-upstream-rebuild`](../../.agents/skills/lazurio-upstream-rebuild/SKILL.md), `Dockerfile.lazurio`, `.dockerignore`, kontraktní test a workflow `lazurio-fork-ci.yml`, `lazurio-cli-archives.yml`, `lazurio-release.yml` (včetně preview vydání pro canary, `X.Y.Z-preview.YYYYMMDD.N` jako GitHub pre-release) a `lazurio-upstream-watch.yml`, formulář issue, `.github/README.md` a bezpečnostní politika `.github/SECURITY.md`. Jméno distribuce nesou vydání, image, formulář a README (rozhodnutí 0200). | Zůstává; v přestavbě jde poslední. v0.1.0 přidala upstream workflow `mobile-android-apk.yml` s hodinovým cronem, který se po výměně `main` vypne ([Hranice automatizace](#hranice-automatizace)). | | 6 | `lazurio: unsent prompt draft by link from the shell` | „+ Nový modul“ otevře Chat se zadáním v poli zprávy nového vlákna, neodeslaným ([Zadání z Launchpadu](#zadání-z-launchpadu)). | v0.1.0 přidala odkazy `/new?prompt=` (#18454), které nesou text v adrese a projekt vybírají podle `repo`; odkaz overlaye text nenese (D13) a zůstává vedle nich. Párování od v0.1.0 po přihlášení stránku znovu načte (#9785), proto odkaz přečká reload v `sessionStorage` (jen id a Organizace). | -| 7 | `feat(web): Lazurio shell slot` | Slot pro shell Lazuria ve webovém klientovi: načtení `/.lazurio/shell.js`, rail vedle aplikace, hlavička sloupce nahoře v sidebaru a Buddy (viz [Lazurio shell](#lazurio-shell)). Mimo Lazurio se nic nevykreslí. | Upstream ekvivalent nemá: zůstává. Výšku hlavičky sloupce měří upstream `observeResize`, jak chce lint `no-raw-resize-observer` z v0.1.0. | +| 7 | `feat(web): Lazurio shell slot` | Slot pro shell Lazuria ve webovém klientovi: načtení `/.lazurio/shell.js`, rail vedle aplikace, hlavička sloupce pod horním řádkem sidebaru a Buddy (viz [Lazurio shell](#lazurio-shell)). Mimo Lazurio se nic nevykreslí. | Upstream ekvivalent nemá: zůstává. Od 2026-10-17 je hlavička sloupce pod horním řádkem T3 (schválený design levého sloupce), takže `AppSidebarLayout.tsx` a přepínač sidebaru jsou upstreamu. | | 8 | `feat(server): each thread's provider processes get its agent-browser session` | Procesy agentů, které T3 spouští pro jedno vlákno, dostanou `AGENT_BROWSER_SESSION=t3-`, takže agenti vlákna pracují ve vlastním okně prohlížeče Environmentu. Codex, jehož app-server slouží všem vláknům instance, ji dostane v konfiguraci vlákna pro příkazy, které jeho agent spouští (viz [Prohlížeč Environmentu](#prohlížeč-environmentu)). | Rozhodnutí 0191; upstream ekvivalent nemá. v0.1.0 smazala `ProviderService.ts` (#2829) a procesy agentů spouští přes `AgentScope` (#17662): šev je dekorátor `AgentScope` v `server.ts` (Claude Code jako nativní binárka, Pi, Muse, agenti ACP) a jeden řádek v `CodexAdapterV2.ts` (`shell_environment_policy.set`). Nepokryto: OpenCode, Cursor, Grok na Linuxu, Claude Code spuštěný jako skript, Windows a terminály vlákna (Lazurio/t3code#73). Nabídnout upstreamu obecnou proměnnou vlákna. | | 9 | `feat(web): the right panel shows the thread's Environment browser tabs` | Na Environmentu Lazuria je prohlížeč Environmentu jediným prohlížečem webového klienta. Pravý panel ukazuje záložky prohlížeče Environmentu, které vlákno drží, podle seznamu serveru, na každém zařízení stejné. Nad pohledem není hlavička, jedinou lištou je lišta pohledu; menu záložky přidá Open in new tab a Reload. × záložku pro vlákno pustí s možností Vrátit a panel se sám otevře, když agent záložku ukáže (viz [Prohlížeč Environmentu](#prohlížeč-environmentu)). | Rozhodnutí 0191, F47. v0.1.0 má pravý panel v14, Mod+Shift+T (#15207) a serverový prohlížeč (#15328), který web ukazuje jen podle `capabilities.serverBrowser`. Švy se přesunuly a přibyl jeden: Mod+Shift+T povrchy prohlížeče Environmentu přeskočí, cestou zpět zůstává Vrátit. Prohlížeč upstreamu skrývá server (řádek 10), web další šev nepotřebuje. | | 10 | `feat(server): T3's browser tools drive the Environment browser` | Nástroje prohlížeče T3 (`preview_open`, `preview_snapshot`, …) ovládají prohlížeč Environmentu i ve webovém T3. Záložku, kterou otevřou nebo převezmou, přidají do záložek vlákna a pohled jiného Environmentu pošlou webu jako živou událost. S `T3CODE_LAZURIO_FOLDER` server serverový prohlížeč upstreamu nestaví ani neinzeruje, takže prohlížeč Environmentu je jediný. | Rozhodnutí 0191. v0.1.0 má vlastní serverový prohlížeč (#15328) s preferovaným hostitelem, 660 s pro `open`, `reason`, ARIA stromem, `playwright-core` a enginem `ServerBrowserPage.ts`; desktop se k brokeru nepřipojuje. Zmenšeno: kopie engine a háčky v brokeru, MCP serveru a balení odpadly. Hostitel overlaye se registruje pod id serverového prohlížeče, `open` omezí na 60 s a stránky ovládá upstream engine s opravou velikosti snímku (nabídnout upstreamu). Vykreslení HTML zůstává upstreamu. Řeší Lazurio/t3code#43. | @@ -214,7 +214,8 @@ Commity v pořadí na `main`: `apps/web/src/lazurio/`: `LazurioPromptDraft.tsx`, `promptDraft.ts` a jeho test. - **7.** `02a09d79ea`. `apps/web/index.html`\*, - `apps/web/src/components/AppSidebarLayout.tsx`. + `apps/web/src/components/sidebar/SidebarChrome.tsx`\* (hlavička sloupce pod + horním řádkem sidebaru). - **8.** `a45bd08f8e`. `apps/server/src/server.ts`\* (dekorátor `AgentScope`), `apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.ts` a jeho test, `apps/server/src/lazurio/agentBrowserSession.ts` a jeho test. @@ -256,7 +257,8 @@ Commity v pořadí na `main`: `managedFirstRun.ts`, `managedFolder.ts` a jeho test. `packages/contracts/src/server.ts`. - **16.** `543f0f9bfc`. `apps/web/src/`: `branding.ts`, `branding.logic.ts` a - `branding.test.ts`, `components/sidebar/SidebarChrome.tsx`; + `branding.test.ts`, `components/sidebar/SidebarChrome.tsx`\* (štítek u + wordmarku); `apps/web/index.html`\* (titulek a splash), `apps/web/public/manifest.webmanifest`. - **17.** `d16500b401`. `apps/web/src/main.tsx`\* (import), `apps/web/src/lazurio/theme.css`. @@ -274,8 +276,8 @@ Commity v pořadí na `main`: issue #33.** V Lazuriu je T3 Code aplikace **Chat** v přepínači Chat · Apps · Automate. Overlay do webového klienta přidává jen slot pro shell Lazuria: rail vlevo, hlavičku sloupce (výběr Environmentu, ozubené kolo Nastavení a přepínač -Chat · Apps · Automate) nahoře ve vlastním sidebaru T3 a plovoucí bublinu -Buddyho. Shell jsou Web Components se Shadow DOM (``, +Chat · Apps · Automate) ve vlastním sidebaru T3 pod jeho horním řádkem a +plovoucí bublinu Buddyho. Shell jsou Web Components se Shadow DOM (``, ``, ``), takže CSS T3 a Lazuria se navzájem neovlivní. Definuje je `/.lazurio/shell.js`, který servíruje Launchpad daného Environmentu na stejném originu za bránou Environmentu; data má v @@ -297,14 +299,19 @@ Slot jsou dva upstream soubory, každý jako vlastní řádek v nechalo pod railem. Proto se při definovaném railu stane obal sidebaru (`[data-slot="sidebar-wrapper"]`) jejich containing blockem (`contain: layout paint`). Bez shellu pravidlo neplatí. -- `apps/web/src/components/AppSidebarLayout.tsx`: - `` jako první prvek sidebaru, nad horním - řádkem upstreamu s logem T3 Code, který zůstává se všemi ovládacími prvky - (rozhodnutí 0200 bod 1: značka T3 Code zůstává; vedle wordmarku přibude jen - štítek „Lazurio“, viz [Jméno a vzhled](#jméno-a-vzhled)). Jedno místo - platí pro sidebar vláken, legacy sidebar i Nastavení. Přepínač sidebaru je - `position: fixed` u horního okraje, takže se při otevřeném sidebaru na - desktopu posune dolů o výšku hlavičky sloupce, s horním řádkem sidebaru. +- `apps/web/src/components/sidebar/SidebarChrome.tsx`: + `` hned pod horním řádkem upstreamu. + Nahoře zůstává řádek s přepínačem sidebaru, wordmarkem T3 Code a štítkem + „Lazurio“, pod ním výběr Environmentu, ozubené kolo a přepínač aplikací + (schválený design levého sloupce z 2026-10-17, prototyp + HumanAndMachine-ai/prototypes-lazurio#56 a #61; rozhodnutí 0200 bod 1: + značka T3 Code zůstává, viz [Jméno a vzhled](#jméno-a-vzhled)). Řádek + upstreamu se jmenuje `SidebarChromeTitlebar` a exportovaný + `SidebarChromeHeader` je tenký obal, který za něj přidá hlavičku sloupce. + Horní řádek kreslí sidebar vláken, legacy sidebar i Nastavení, takže hlavičku + mají všechny tři. Přepínač sidebaru (`position: fixed`) zůstává v horním + rohu jako v upstreamu, při otevřeném i skrytém sidebaru, a + `AppSidebarLayout.tsx` se nemění. Kontraktní test hlídá obojí, takže přestavba na nový upstream tag, která slot ztratí, v CI selže. Přepínač i rail vedou obyčejnými odkazy na jiné originy @@ -322,7 +329,12 @@ vzhled design systému, který tokeny T3 mapuje. Vlastní výběr motivů má zatím každá aplikace; sjednocení motivů napříč aplikacemi je samostatná pozdější práce. -Mezi railem a sidebarem T3 nesmí být vidět čára. Proto: +Mezi railem a sidebarem T3 je od 2026-10-17 tenká čára (rozhodnutí +Organization Admina ke schválenému designu levého sloupce mění rozhodnutí 0187 +bod 2). Kreslí ji rail barvou role `--lazurio-line`, kterou `index.html` bere +z `--contrast-sidebar-border` T3, takže sleduje světlý, tmavý i každý jiný +motiv; fork pro čáru nic nepřidává. Plocha railu a sidebaru má zůstat stejná, +aby čára byla jediným rozhraním. Proto: - Role jsou deklarované na `:root` i na `[data-app-sidebar]`, tedy tam, kde T3 přepočítává paletu svého sidebaru, a `` nese @@ -376,7 +388,12 @@ Lazuria; wordmark ani ikony nepřebarvujeme ani nepřekreslujeme. záložky, na stránkách párování, 404 a chyby, v hlášení chyby, ve splashi a ve web manifestu (`short_name` je „T3 Code“). Štítek „Lazurio“ stojí i vedle wordmarku v sidebaru, v místě, které upstream dává pilulce Dev - a Nightly, a to v každém režimu identifikace. Vývojový build zůstává + a Nightly, a to v každém režimu identifikace. Od 2026-10-17 (schválený + design levého sloupce) má štítek před slovem symbol Lazuria + (`apps/web/src/lazurio/LazurioBadge.tsx`): celý schválený asset design + systému v nejmenší povolené velikosti 16 px, na tmavém vzhledu tmavá + verze; proto je štítek vyšší (20 px) než malá pilulka T3. Soubory symbolu + jsou v `apps/web/src/lazurio/brand/` beze změny. Vývojový build zůstává „T3 Code (Dev)“. Náhled `X.Y.Z-preview.YYYYMMDD.N` je canary příštího stable, ne nightly: jmenuje se stejně a nemá noční artwork upstreamu. - **Vzhled (řádek 17).** Shell Environmentu (`/.lazurio/shell.js`, @@ -1051,7 +1068,7 @@ ověřené. Rozdíl mezi bázemi ukáže přestavby. - **Slot shellu a vzhled design systému.** Shell Environmentu (`/.lazurio/shell.js`, rozhraní v1) se zavěšuje do `apps/web/index.html` - a `AppSidebarLayout.tsx` a `apps/web/src/lazurio/theme.css` mapuje jeho + a `sidebar/SidebarChrome.tsx` a `apps/web/src/lazurio/theme.css` mapuje jeho tokeny na tokeny T3 z `apps/web/src/index.css`. Kontraktní test hlídá slot, barevné role shellu a to, že mapované tokeny `index.css` deklaruje ve stejném scope. Nové tokeny upstreamu nezachytí, ty mají výchozí hodnoty T3; @@ -1156,7 +1173,8 @@ všechny kontroly kroku 3 a navíc to, čeho se přestavba dotkla v každém sdílený Environment Ring 0 nepřihlašujte; - „+“ i Mod+T otevřou Novou kartu a serverový prohlížeč upstreamu se nikde neukáže; -- rail, hlavička sloupce a Buddy, bez čáry mezi railem a sidebarem; +- rail, hlavička sloupce pod horním řádkem s přepínačem a wordmarkem a Buddy, + s tenkou čárou mezi railem a sidebarem v barvě motivu (světlý i tmavý); - stará vlákna po migraci databáze a restart služby se zachovanými daty. Bez přihlášeného poskytovatele vlákno se zprávou nevznikne (odeslání je vypnuté), stará vlákna pak ověřte na prvním Environmentu s historií; diff --git a/scripts/lazurio-release-contract.test.mjs b/scripts/lazurio-release-contract.test.mjs index c4a44fe6ed859..aa35814ec4bea 100644 --- a/scripts/lazurio-release-contract.test.mjs +++ b/scripts/lazurio-release-contract.test.mjs @@ -924,10 +924,13 @@ NodeTest.test( ); NodeTest.test("the Lazurio shell slot survives a rebuild on a new upstream tag", async () => { - const [page, layout, sidebarUi] = await Promise.all([ + const [page, layout, sidebarUi, chrome, threads, legacy] = await Promise.all([ read("apps/web/index.html"), read("apps/web/src/components/AppSidebarLayout.tsx"), read("apps/web/src/components/ui/sidebar.tsx"), + read("apps/web/src/components/sidebar/SidebarChrome.tsx"), + read("apps/web/src/components/Sidebar.tsx"), + read("apps/web/src/components/LegacySidebar.tsx"), ]); // Same-origin loader that Vite leaves alone; the Environment's Launchpad serves it. NodeAssert.match( @@ -954,26 +957,27 @@ NodeTest.test("the Lazurio shell slot survives a rebuild on a new upstream tag", page, /<\/div>\s*<\/lazurio-buddy>\s*