Repository navigation
Guide: the host's shell explains a page in place, starting with Soubory (F56, DEV-6612) - #501
Conversation
…1 protocol (F56) The host's shell now draws the guide of root decision 0180's addendum of 2026-10-18: a "?" (data-guide-help) makes the neutral guide of Lazurio, and later Buddy, ring a real element and say a few words beside it. guide.ts decides what plays and when over seams, guide-layer.ts draws it in <lazurio-buddy>'s own shadow root (ring, mark, card, placement, motion with prefers-reduced-motion, Escape and focus), guide-content.ts holds the six principles in Czech and English with the prototype's ids and rules, and parses what a host hands over with provideGuides. The bubble's placement rule moves unchanged from src/launchpad/tour-placement.ts to src/shell/guide-placement.ts, and the tour uses it from there; the tour and the guide never run at once (guideAttention). Interface v1 grows by <lazurio-buddy lang>, the marks data-guide and data-guide-help, the event lazurio-guide and the export provideGuides. Without explanations handed over and without a Buddy origin the element draws and listens to nothing, so the forks are unchanged. The pure protocol for Buddy's frame (guide-protocol.ts) ships with its vectors in F50's format, but no message listener is registered until Buddy has an origin (plan DEV-6612 M7). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…g sentences (F56) Soubory is the first page with the shell's guide: a "?" right after its heading in the breadcrumb plays the principle "files", and in a Team Environment the Launchpad's own "files-team" (the folder is the Team's), chosen by the Environment's kind alone (#499). The page hands its explanations over with provideGuides on every move, places <lazurio-buddy lang>, and marks the Files item (nav-files) and the list (files-list). The tour tells the guide whether Začínáme wants attention and nudges its own bubble when a "?" asks meanwhile; Recovery mode withdraws the guide. The sentences the "?" replaces go in the same change: the introduction ("Složka Dokumenty tohoto Prostředí. Agenti sem ukládají…"), the Team note ("Toto Týmové Prostředí je sdílené…"), and the empty Documents folder now says only "Zatím žádné soubory." / "No files yet.". Every other page gets its "?" in the next slice of plan DEV-6612. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…part F56 records root decision 0180's addendum of 2026-10-18 for the Platform: the engine and the six principles in the shell, a page's explanations in its host (variant C2), the five additions to interface v1 and why each, the lazurio.guide.* v1 protocol with its acceptance rules and vectors, the arbiter with the onboarding tour, Soubory as the first page, the alternatives, honest limits and how it was verified. docs/launchpad-development.md describes the modules, how a host takes part, the Files page without its explaining sentences and the placement rule's new place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Full suite on this exact head (04b363b, clean tree): |
agentrozjedemeai
left a comment
There was a problem hiding this comment.
@immakermatty — src/shell/guide.ts:263-271: Detaching the active clears playing without calling the layer’s draw(null, actions). Unlike withdrawal via provide(null), this leaves the layer’s document keydown/resize listeners and 250 ms interval running. On reattachment, the existing layer still considers itself visible; replaying the same explanation skips first-show setup (including focus and URL snapshot), so a later tick can close the new guide against the old URL. I reproduced the lifecycle on this exact head: attach → provide([]) → play("files") → detach produced only draw(show), no draw(null); reattach → play produced show, show. Close the active layer on detach and cover detach/reattach with a regression test before merge. Local: 151 focused tests pass, check:static passes; CI green; diff --check clean.
…r end does, clearing its layer Pablo's review of #501: detaching the element that drew an explanation cleared `playing` without telling its layer to draw nothing, so the layer's document listeners and 250 ms timer kept running, and a reattached element skipped the first-show setup (focus, URL snapshot). `detach` now ends the explanation through `end("closed")`, the same path `provide(null)` takes. A regression test covers detach and reattach; it fails on the previous code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
agentrozjedemeai
left a comment
There was a problem hiding this comment.
@immakermatty — Re-review of b1d6f22: the detach path now calls end("closed"), which clears the active layer through draw(null, actions), removes the layer listeners/timer, announces closed, and notifies attention listeners. The detach/reattach regression passes and the new behavior matches the prior finding; no remaining defect found in this fix. Local detached checkout: 152 focused tests passed, check:static passed, diff --check clean. Exact-head CI checks succeeded and unresolved review threads: 0. Approved for this head only.
…ining sentences (F56 addendum, DEV-6612) (#502) * Shell: the guide engine, its six principles and the lazurio.guide.* v1 protocol (F56) The host's shell now draws the guide of root decision 0180's addendum of 2026-10-18: a "?" (data-guide-help) makes the neutral guide of Lazurio, and later Buddy, ring a real element and say a few words beside it. guide.ts decides what plays and when over seams, guide-layer.ts draws it in <lazurio-buddy>'s own shadow root (ring, mark, card, placement, motion with prefers-reduced-motion, Escape and focus), guide-content.ts holds the six principles in Czech and English with the prototype's ids and rules, and parses what a host hands over with provideGuides. The bubble's placement rule moves unchanged from src/launchpad/tour-placement.ts to src/shell/guide-placement.ts, and the tour uses it from there; the tour and the guide never run at once (guideAttention). Interface v1 grows by <lazurio-buddy lang>, the marks data-guide and data-guide-help, the event lazurio-guide and the export provideGuides. Without explanations handed over and without a Buddy origin the element draws and listens to nothing, so the forks are unchanged. The pure protocol for Buddy's frame (guide-protocol.ts) ships with its vectors in F50's format, but no message listener is registered until Buddy has an origin (plan DEV-6612 M7). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Launchpad: Soubory explains itself with a "?" and loses its explaining sentences (F56) Soubory is the first page with the shell's guide: a "?" right after its heading in the breadcrumb plays the principle "files", and in a Team Environment the Launchpad's own "files-team" (the folder is the Team's), chosen by the Environment's kind alone (#499). The page hands its explanations over with provideGuides on every move, places <lazurio-buddy lang>, and marks the Files item (nav-files) and the list (files-list). The tour tells the guide whether Začínáme wants attention and nudges its own bubble when a "?" asks meanwhile; Recovery mode withdraws the guide. The sentences the "?" replaces go in the same change: the introduction ("Složka Dokumenty tohoto Prostředí. Agenti sem ukládají…"), the Team note ("Toto Týmové Prostředí je sdílené…"), and the empty Documents folder now says only "Zatím žádné soubory." / "No files yet.". Every other page gets its "?" in the next slice of plan DEV-6612. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: F56, the guide drawn by the host's shell, and how a host takes part F56 records root decision 0180's addendum of 2026-10-18 for the Platform: the engine and the six principles in the shell, a page's explanations in its host (variant C2), the five additions to interface v1 and why each, the lazurio.guide.* v1 protocol with its acceptance rules and vectors, the arbiter with the onboarding tour, Soubory as the first page, the alternatives, honest limits and how it was verified. docs/launchpad-development.md describes the modules, how a host takes part, the Files page without its explaining sentences and the placement rule's new place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Guide: a <lazurio-buddy> detached mid-explanation ends it as any other end does, clearing its layer Pablo's review of #501: detaching the element that drew an explanation cleared `playing` without telling its layer to draw nothing, so the layer's document listeners and 250 ms timer kept running, and a reattached element skipped the first-show setup (focus, URL snapshot). `detach` now ends the explanation through `end("closed")`, the same path `provide(null)` takes. A regression test covers detach and reattach; it fails on the previous code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Guide: the card links an explanation's documentation at its last step (F56 addendum) The approved wireframe's guide card has a quiet "Dokumentace" link at an explanation's last step, where a page's link to its documentation went; F56's engine had no place for it, and Integrace's "Jak to funguje" is to move from the page's corner into the card. An explanation now carries `docs`: the principle "integrations" has the documentation of Integrace in each language, and a host may hand one over with an explanation, only as an https address with a host and no credentials (else the entry is left out). The layer draws it at the last step, in a new tab ("Dokumentace" / "Documentation"). provideGuides' explanation grows by one optional member, additive within interface v1. The rules of a text no longer count "MCP server", the precise name of a thing, as the forbidden "server". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Launchpad: Apps, Integrace and Trezor explain themselves with a "?" and lose their explaining sentences (F56 addendum) Every page of the Apps column now has one "?" right after its heading (pageHelpOf): the Apps home plays the principle "environment"; Integrace the principle "integrations", where Composio is allowed the Launchpad's "integrations-composio" and on Vlastní "integrations-custom", each with the page's documentation in the card; Trezor what is true of this Environment's vault, chosen only from facts the page has (#499): the principle "vault" in a Personal Environment, the Launchpad's "vault-agents" where nobody who enters is added to the vault (a Team or Automated Environment, a vault without the Lazurio sign-in yet) and while that is not known, and the approved video "vault-overview" in place where the person is in the vault or the Environment has none (page-help.ts). Removed in both languages: Integrace's line under the title and its corner's "Jak to funguje", Trezor's rule and the section of an Environment without a vault, whose video the "?" now opens. The vault page's model lost the two members that drew them and reports what it read; the pages carry the marks the principles look for (browser, nav-integrations, nav-vault, vault-row, vault-open, composio-apps) and Integrace draws its own (integration-on, integration-connect, mcp-list, mcp-add). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: F56 addendum, every page of the Apps column has its "?" and loses its explaining sentences Records what Apps, Integrace and Trezor play, the card's documentation link, how Trezor's variant is chosen from the vault core's answer, the person's place in the vault and the kind (#499), why its approved video plays in the page rather than in the card, exactly what changed on the vault page, and the limits; launchpad-development.md describes the page help, its marks and the browser check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Trezor: the connect lead says it naturally, and the Czech guard forbids "jen vám" and "jen pro vás" The DEV-6631 vault lead's review of #502: the lead of a Personal Environment's Bitwarden connection said "Ten váš zůstane jen pro vás.", the phrasing Matěj banned on 2026-10-17 as unnatural Czech. It now says "Agenti dostanou vlastní účet a do toho vašeho nevidí." / "Your agents get their own account and can't see into yours." (the vault lead's words). The Czech guard of tests/environment-wording.test.ts allowed "jen vám" by the rule of 2026-10-14 and never matched "jen pro vás"; both are forbidden now, so the phrase cannot come back. vaultHelp's comment also names the fault reasons, which play the video too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Trezor: the "?" waits for the vault's state in every kind, and plays the video only for a member Pablo's review of #502. vaultHelp returned "vault" for a Personal Environment before it checked whether GET /api/vault had answered, so the Personal Trezor's "?" showed before the page knew its state; the unread guard now comes first, in every kind. And any known membership, a person removed in the vault included, played the approved video, whose story is sharing from one's own Bitwarden into the vault: only a member does that now; no account or no master password yet, removed, and every other non-member state hear "vault-agents". What each "?" shows is now pure (pageHelpStates), and ui.ts sets it on the buttons, so the page's transition is tested where it is decided: every "?" hidden while the vault is unread, the header's playing "vault" once it answered, the video for a member, "vault-agents" for a removed person. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Settings: Escape closes the guide's explanation and the page stays Pablo's review of #502. Escape leaves Settings for the Apps home, and the shell's listener is registered when the page loads, before the guide's, which is added only when an explanation opens; so the guide's preventDefault came too late and Escape on a Settings section with an explanation open navigated home. The shell now asks the guide first (createShell's `guiding`, the arbiter's `playing`), through the pure escapeLeavesSettings, which the regression test covers with the guide open, a dialog, a field being typed in and every other view. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: F56 addendum, Trezor's "?" waits in every kind, the video only for a member, Escape is the guide's Records the three corrections of Pablo's review of #502 in the addendum and launchpad-development.md: the unread guard before the kind, only a member hears the approved video, and Escape on Settings closes an open explanation (escapeLeavesSettings, pageHelpStates). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Settings: escapeLeavesSettings stands above the frame's comment The previous commit put the function between createShell and the comment that describes it; the comment is createShell's again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ntences (F56 addendum, DEV-6612) (#503) * Shell: the guide engine, its six principles and the lazurio.guide.* v1 protocol (F56) The host's shell now draws the guide of root decision 0180's addendum of 2026-10-18: a "?" (data-guide-help) makes the neutral guide of Lazurio, and later Buddy, ring a real element and say a few words beside it. guide.ts decides what plays and when over seams, guide-layer.ts draws it in <lazurio-buddy>'s own shadow root (ring, mark, card, placement, motion with prefers-reduced-motion, Escape and focus), guide-content.ts holds the six principles in Czech and English with the prototype's ids and rules, and parses what a host hands over with provideGuides. The bubble's placement rule moves unchanged from src/launchpad/tour-placement.ts to src/shell/guide-placement.ts, and the tour uses it from there; the tour and the guide never run at once (guideAttention). Interface v1 grows by <lazurio-buddy lang>, the marks data-guide and data-guide-help, the event lazurio-guide and the export provideGuides. Without explanations handed over and without a Buddy origin the element draws and listens to nothing, so the forks are unchanged. The pure protocol for Buddy's frame (guide-protocol.ts) ships with its vectors in F50's format, but no message listener is registered until Buddy has an origin (plan DEV-6612 M7). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Launchpad: Soubory explains itself with a "?" and loses its explaining sentences (F56) Soubory is the first page with the shell's guide: a "?" right after its heading in the breadcrumb plays the principle "files", and in a Team Environment the Launchpad's own "files-team" (the folder is the Team's), chosen by the Environment's kind alone (#499). The page hands its explanations over with provideGuides on every move, places <lazurio-buddy lang>, and marks the Files item (nav-files) and the list (files-list). The tour tells the guide whether Začínáme wants attention and nudges its own bubble when a "?" asks meanwhile; Recovery mode withdraws the guide. The sentences the "?" replaces go in the same change: the introduction ("Složka Dokumenty tohoto Prostředí. Agenti sem ukládají…"), the Team note ("Toto Týmové Prostředí je sdílené…"), and the empty Documents folder now says only "Zatím žádné soubory." / "No files yet.". Every other page gets its "?" in the next slice of plan DEV-6612. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: F56, the guide drawn by the host's shell, and how a host takes part F56 records root decision 0180's addendum of 2026-10-18 for the Platform: the engine and the six principles in the shell, a page's explanations in its host (variant C2), the five additions to interface v1 and why each, the lazurio.guide.* v1 protocol with its acceptance rules and vectors, the arbiter with the onboarding tour, Soubory as the first page, the alternatives, honest limits and how it was verified. docs/launchpad-development.md describes the modules, how a host takes part, the Files page without its explaining sentences and the placement rule's new place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Guide: a <lazurio-buddy> detached mid-explanation ends it as any other end does, clearing its layer Pablo's review of #501: detaching the element that drew an explanation cleared `playing` without telling its layer to draw nothing, so the layer's document listeners and 250 ms timer kept running, and a reattached element skipped the first-show setup (focus, URL snapshot). `detach` now ends the explanation through `end("closed")`, the same path `provide(null)` takes. A regression test covers detach and reattach; it fails on the previous code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Guide: the card links an explanation's documentation at its last step (F56 addendum) The approved wireframe's guide card has a quiet "Dokumentace" link at an explanation's last step, where a page's link to its documentation went; F56's engine had no place for it, and Integrace's "Jak to funguje" is to move from the page's corner into the card. An explanation now carries `docs`: the principle "integrations" has the documentation of Integrace in each language, and a host may hand one over with an explanation, only as an https address with a host and no credentials (else the entry is left out). The layer draws it at the last step, in a new tab ("Dokumentace" / "Documentation"). provideGuides' explanation grows by one optional member, additive within interface v1. The rules of a text no longer count "MCP server", the precise name of a thing, as the forbidden "server". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Launchpad: Apps, Integrace and Trezor explain themselves with a "?" and lose their explaining sentences (F56 addendum) Every page of the Apps column now has one "?" right after its heading (pageHelpOf): the Apps home plays the principle "environment"; Integrace the principle "integrations", where Composio is allowed the Launchpad's "integrations-composio" and on Vlastní "integrations-custom", each with the page's documentation in the card; Trezor what is true of this Environment's vault, chosen only from facts the page has (#499): the principle "vault" in a Personal Environment, the Launchpad's "vault-agents" where nobody who enters is added to the vault (a Team or Automated Environment, a vault without the Lazurio sign-in yet) and while that is not known, and the approved video "vault-overview" in place where the person is in the vault or the Environment has none (page-help.ts). Removed in both languages: Integrace's line under the title and its corner's "Jak to funguje", Trezor's rule and the section of an Environment without a vault, whose video the "?" now opens. The vault page's model lost the two members that drew them and reports what it read; the pages carry the marks the principles look for (browser, nav-integrations, nav-vault, vault-row, vault-open, composio-apps) and Integrace draws its own (integration-on, integration-connect, mcp-list, mcp-add). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: F56 addendum, every page of the Apps column has its "?" and loses its explaining sentences Records what Apps, Integrace and Trezor play, the card's documentation link, how Trezor's variant is chosen from the vault core's answer, the person's place in the vault and the kind (#499), why its approved video plays in the page rather than in the card, exactly what changed on the vault page, and the limits; launchpad-development.md describes the page help, its marks and the browser check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Launchpad: every section of Settings explains itself with a "?" and loses its explaining sentences (F56 addendum) Začínáme (only where it has the basics), Obecné, Komunikace agentů, Toto <kind> Prostředí, Nástroje, the devices section and Obnova now each have the header's "?" right after their heading, playing the Launchpad's explanation: the wireframe's settings-* where it has the section, a Team Environment's own for Komunikace, Nástroje and the devices, and on your computer its own words for Toto Prostředí. Their marks are on the page or drawn by the panels once read (the AI and GitHub steps, the first sign-in and "Používají agenti", the recovery result and checks). Removed in both languages: Začínáme's GitHub line and the Composio and Bitwarden rows' lines, Obecné's four row descriptions, Komunikace's introduction, Team line and hint, Nástroje's "Zjištěno v", tier notes, Team note and custom MCP line, the devices section's introduction, Team note, prompt note and computer note, and Obnova's explanations of the repair agent, the evidence and the issue. Escape closes an explanation on a Settings section instead of leaving Settings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: F56 addendum (2), every section of Settings has its "?" and loses its explaining sentences Records what each section plays, what was removed and what was kept and why, the marks, and Escape's new owner while the guide explains; launchpad-development.md lists the sections' explanations and marks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Trezor: the connect lead says it naturally, and the Czech guard forbids "jen vám" and "jen pro vás" The DEV-6631 vault lead's review of #502: the lead of a Personal Environment's Bitwarden connection said "Ten váš zůstane jen pro vás.", the phrasing Matěj banned on 2026-10-17 as unnatural Czech. It now says "Agenti dostanou vlastní účet a do toho vašeho nevidí." / "Your agents get their own account and can't see into yours." (the vault lead's words). The Czech guard of tests/environment-wording.test.ts allowed "jen vám" by the rule of 2026-10-14 and never matched "jen pro vás"; both are forbidden now, so the phrase cannot come back. vaultHelp's comment also names the fault reasons, which play the video too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Trezor: the "?" waits for the vault's state in every kind, and plays the video only for a member Pablo's review of #502. vaultHelp returned "vault" for a Personal Environment before it checked whether GET /api/vault had answered, so the Personal Trezor's "?" showed before the page knew its state; the unread guard now comes first, in every kind. And any known membership, a person removed in the vault included, played the approved video, whose story is sharing from one's own Bitwarden into the vault: only a member does that now; no account or no master password yet, removed, and every other non-member state hear "vault-agents". What each "?" shows is now pure (pageHelpStates), and ui.ts sets it on the buttons, so the page's transition is tested where it is decided: every "?" hidden while the vault is unread, the header's playing "vault" once it answered, the video for a member, "vault-agents" for a removed person. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Settings: Escape closes the guide's explanation and the page stays Pablo's review of #502. Escape leaves Settings for the Apps home, and the shell's listener is registered when the page loads, before the guide's, which is added only when an explanation opens; so the guide's preventDefault came too late and Escape on a Settings section with an explanation open navigated home. The shell now asks the guide first (createShell's `guiding`, the arbiter's `playing`), through the pure escapeLeavesSettings, which the regression test covers with the guide open, a dialog, a field being typed in and every other view. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: F56 addendum, Trezor's "?" waits in every kind, the video only for a member, Escape is the guide's Records the three corrections of Pablo's review of #502 in the addendum and launchpad-development.md: the unread guard before the kind, only a member hears the approved video, and Escape on Settings closes an open explanation (escapeLeavesSettings, pageHelpStates). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Settings: escapeLeavesSettings stands above the frame's comment The previous commit put the function between createShell and the comment that describes it; the comment is createShell's again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Nástroje: the guide's steps on connecting and on the switch always name something the page draws Pablo's review of #503. "tool-connect" sat only on the first sign-in button and "tool-agents" only on a switch, so an Environment where every tool is signed in already (curatedActions offers no sign-in then), and a Team Environment whose gh works as the Organization's identity, left the steps on connecting pointing at nothing. toolGuideTargets (tools-view.ts) now chooses from what the page draws, in its order: the first sign-in or adding and connecting, else the first connection already made (its line, never gh of a Team Environment), else a tool's line; the first switch "Používají agenti", else a required tool's "Vždy zapnuto". The panel puts the marks on exactly those, and the test covers a sign-in to make, all signed in, a Team Environment with and without a team account, and the rows that are no person's sign-in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Settings: what no step of the "?" says stays beside its choice Pablo's review of #503. Three removed sentences carried meaning no step of their section's explanation carries, so they are back beside the choice they explain, in both languages: - Začínáme's optional rows Composio ("Pošta, kalendář a další aplikace pro agenty.") and Trezor v Bitwardenu ("Hesla z Trezoru Prostředí i v Codex Desktopu a ve vašem prohlížeči."), as SSH and Codex Desktop kept theirs; - Obecné's preset hint "Druh tohoto Prostředí.", which settings-general's four steps do not name; - Obnova's evidence note "Jen sanitizovaná strukturovaná pole, přesně jak je nese připravené issue.", where a person decides whether to file it to the public repository. A test holds them on the page and in the words, and that Obecné's steps still leave the preset to its hint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: F56 addendum (2), what stays beside its choice and where Nástroje's steps point Records the corrections of Pablo's review of #503: the kept lines of Začínáme's optional rows, Obecné's preset hint and Obnova's evidence note, the marks of Nástroje chosen by toolGuideTargets, and that Escape on Settings came with #502. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Nástroje: the "?" says only what the page can show, never a sign-in where nobody can sign in Pablo's review of #503 (eab0b19). In a Team Environment with gh alone, toolGuideTargets fell back to gh's line, so "Přihlašujte se tu týmovými účty" and "Co přihlásíte, může používat každý z Teamu" pointed at the Organization's app identity, which signs nobody in. The targets are now only what a person can use: a sign-in (or adding and connecting) or a connection someone made, and a switch that moves; never gh of a Team Environment, a tool the Organization does not allow, a vault's or Executor's row; null where there is none, and no fallback. The steps follow those facts, as Trezor's follow the vault: the tools panel reports its targets through a `drawn` hook (PageGuideFacts.tools), and toolsGuide leaves out the two steps on connecting where nothing can be connected and the switch's step where nothing moves, keeping what the page is and, in a Team Environment, that the Team shares it. Until the tools are read the "?" stays hidden. Tests render the chain the page uses (toolGroups, toolGuideTargets, pageGuide) and assert each step's words, its mark and what the mark is on: a Team Environment with gh alone (one step), with a team account connected or to connect, a Work Environment with a sign-in to make, everything connected, and a tool the Organization does not allow; and the "?" hidden while unread. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Docs: F56 addendum (2), Nástroje's steps follow what its page can show Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Guide: Nástroje's switch step takes the same rows as its connect steps, never the vault's, Executor's or an unoffered tool's Pablo's review of #503 (round 3): `toolGuideTargets` excluded the vault and Executor rows and tools not offered here only for `connect`. The switch step could still land on Trezor v Bitwardenu's row or on a switched-on tool this Environment does not offer (listed only so it can be switched off). Both steps now take their rows from one eligible list. The test renders a Team Environment with gh and the vault row, with an unoffered switched-on tool, and both, and asserts the targets and the resulting steps; it fails on the previous code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… in Apps, three kinds of words, the theme Brings #467 up to date with main (dbee5f6) after the guide F56 (#501-#503, #509), Apps → Trezor (#495, #500), three kinds of Environment (#497), one colour theme per Environment (#493) and the tour's gear stop (#475). One textual conflict, in scripts/preview-launchpad.ts: main's `team` flag for a hosted Team Environment and this branch's `workspace-tabs` flag sit side by side; each keeps its own option. The section head keeps main's accent colour (`--lz-accent`, #493) for its flag and rule. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Why
People who arrive in Lazurio are confused until they understand a few principles. The Launchpad's pages carry explaining sentences that a person has to read before they can act. Matěj decided on 2026-10-18 (root decision 0180, addendum of 2026-10-18) that a "?" beside a page's heading makes Buddy explain the page in place:
This is slice PR 4 of the DEV-6612 Launchpad lane (plan
DEV-6612-produkt-jedna, milestone M3, shaping section 3(c) "„?“ → Buddy na místě"). Variants of an explanation follow #499: they come only from facts the host knows, never from an Organization's name. The reference is the approved wireframe (HumanAndMachine-ai/prototypes-lazuriobebea85,docs/buddy-guide.md).The decision is recorded as F56 in
docs/decisions.md.What it adds
The guide's engine lives in the shell (
src/shell/), so the Launchpad, the Dashboard (by its pin) and the T3 Code and MausBot forks share one engine and one check of who may ask:guide.tsdecides what plays and when, over seams, so it is tested without a DOM.guide-layer.tsdraws in<lazurio-buddy>'s own shadow root: the ring, the neutral guide's mark (the Lazurio symbol on a white disc), the card, placement, motion withprefers-reduced-motion, Escape and focus.guide-styles.tsis the layer's stylesheet.guide-content.tsholds the six principles in Czech and English: Prostředí, Osobní Prostředí, kam smějí agenti, Soubory, Integrace and Trezor. They use the wireframe's ids and follow the text rules. Kind tokens are filled from the shell's kind facts (automatedcounts aswork), your computer gets its own words, and the Personal Environment gets its own Trezor version.guide-placement.tsis the pure placement rule, moved unchanged fromsrc/launchpad/tour-placement.ts; the Launchpad's tour now uses it from there. The guide adds two things: without an element its card stands centred, and below 768 px the card is a sheet at the foot of the window.Additions to interface v1 (permanent, kept as few as possible):
<lazurio-buddy lang>marks:data-guide,data-guide-helplazurio-guide({type: "started" | "done" | "closed", explainer})provideGuidesWithout explanations handed over and without a Buddy origin,
<lazurio-buddy>draws nothing, listens to nothing and keeps nothing: no shadow root, no listener, no subscription. So the forks do not change after rollout. The following are not promised:guideAttention(not exported byshell.js).The
lazurio.guide.*v1 protocol (src/shell/guide-protocol.ts, pure, with vectors insrc/shell/guide-vectors/v1/guide-protocol.json, run through F50's vector runner and format):{type: "lazurio.guide.play", v: 1, explainer}.type,vandexplainer;vis 1;explaineris a known id, either a principle or an explanation of the current page;busyinstead.{type: "lazurio.guide.started|done|closed|busy", v: 1, explainer, kind?}, posted to the exact origin, never*.createGuideReceiver) and the vectors ship now, so PR 7 only wires them up once Buddy has an origin (M7).On the Launchpad, Soubory is the first page with a "?":
files. In a Team Environment it plays the Launchpad's ownfiles-team, chosen by the kind alone (src/launchpad/guides.ts).nav-filesandfiles-list.files-team);What it deliberately does not do yet
filescannot be reached from the Launchpad yet, and the host marks they look for come with PR 5.tab-chat,picker, …) are found by selectors inside those elements without touching their code.Verification
bun run check:static: lint, typecheck, public check, proof build and smoke.tests/shell-guide-protocol.test.ts,tests/shell-guide.test.ts,tests/launchpad-guide.test.ts,tests/shell-interface.test.ts,tests/launchpad-shell-routes.test.ts,tests/tour-placement.test.ts,tests/first-run.test.ts.Together, 230 pass and 0 fail.
bun test --timeout 30000gave 4148 pass, 9 skip, 0 fail (4157 tests in 284 files). It ran on the tree just before the unusedplayGuideexport was removed; the run on this exact head is noted in a comment below.scripts/preview-launchpad.ts, on Soubory, in Czech and English, in a Work and a Team Environment, at 1440 and 700 px, and at 1440 px withprefers-reduced-motion:<lazurio-buddy>has no shadow root.files. The ring sits exactly on the column head's Chat tab for steps 1–3 and on the Soubory item for step 4. The steps advance with Enter, and the last button reads "Rozumím" / "Got it".files-team. The ring is on the Chat tab, then on the file list.#page-help./.lazurio/shell.jsand has<lazurio-rail>,<lazurio-column-head>,<lazurio-buddy>and adata-guide-helpbutton, but noprovideGuides. There,<lazurio-buddy>is defined, but after a click on the "?" it has no shadow root, no children and zero height./.lazurio/account/environments404,/api/update/status503,/api/content/jobs/latest404), which answer the same way without this change.cs-work-1440-1.png,cs-team-1440-2.png,en-team-700-2.png,cs-work-1440-0-busy.pngandcs-work-fork-like.png.Risks
<lazurio-buddy>in Chat and Automate, since both load the Launchpad'sshell.js. With noprovideGuidesthe element makes no shadow root and adds no listener; this was checked on a fork-like page in the browser.messages.tsandindex.htmlmay conflict with Launchpad Files: grid view with image previews, colour by file kind, shorter copy #357, Apps: add Work and Administration groups within Workspace #446 and Apps: an Organization's own tabs in Workspace (supersedes #446's per-browser groups) #467, andfiles-panel.tswith Launchpad Files: grid view with image previews, colour by file kind, shorter copy #357 (Files copy). Launchpad: the tour's gear stop for AI is its title alone #475 is untouched.Open questions
files-teamwere written by the agent. Matěj, please review the wording.Refs: plan DEV-6612 (
data/mission-control/plans/2026/09/DEV-6612-produkt-jedna.yaml), root decision 0180 addendum of 2026-10-18, #499.🤖 Generated with Claude Code
Note
Add shell guide engine that explains pages in place via
<lazurio-buddy>, starting with Files<lazurio-buddy>elements (elements.ts)provideGuidesAPI; the Launchpad Files page supplies a Team-specific guide and a heading help button, and its former inline intro and shared-folder notes are removed in favor of the guidesharedmethod in files-panel.ts must be updatedMacroscope summarized 04b363b.