Repository navigation
Trezor: an Environment without a vault explains the vault; the public Organization has none on purpose (DEV-6631) - #481
Conversation
…blic Organization says it has none on purpose
Nastavení → Trezor on an Environment without a vault said only "Toto
Prostředí zatím trezor nemá." Matěj asked (2026-10-17, plan DEV-6631) for a
proper explanation with a motion graphic of a real Organization, and for the
public reference Organization to say that it has no vault on purpose (F53's
addendum of 2026-10-17).
- The vault core tells the two reasons apart from the handover, with no
login named: without a `vault` member, an Organization's Environment whose
handover names no `network` is `no-tailnet` (Machines writes no network
only for a platform-public Organization's public-entry work VMs, root
decision 0204, and a Lazurio Vaultwarden answers only inside its tailnet,
0203); any other stays `no-vault`. The CLI, the Tools row ("V tomto
Prostředí není k dispozici") and a secret request's refusal ("Toto
Prostředí trezor nemá.") no longer say "yet" there.
- The page says why in its line (a public demo where real passwords do not
belong / not set up yet, the Organization's Admin sets it up) and shows
"Jak trezor funguje": the new guide video `vault-overview` with its player
there from the start at its poster (`createGuideVideo`'s `open`, mounted
the first time the section shows) and three sentences on how a vault works.
The public visitors' Environment still has no Trezor (F55 unchanged).
- The video: the design system's approved `vault` / `vault-en` cuts, 23.8 s,
H.264 1920x1080, no audio track, faststart, 1.2 MB a language, WebP
posters of 22 KB (HumanAndMachine-ai/design-system-lazurio#93).
- The hosted preview takes `no-vault` or `no-tailnet` to show either state.
Tests: the reason from the handover, both lines word for word in both
languages with the explainer and the reasons without it, GET /api/vault for
both reasons, the section's order and the player's files and names, every
video file's format, the Tools row, the CLI and the request's words.
Checked in headless Chrome on the hosted preview in Czech and English.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
agentrozjedemeai
left a comment
There was a problem hiding this comment.
Approved at exact head ffa1750. The handover split, personal Bitwarden path, public-visitor gate, Czech/English copy, guide-video embedding and range route are coherent. Independent validation: 97 focused tests passed across 8 files; lint and typecheck passed; the local hosted preview loaded only the poster before play (no autoplay), and a range request returned 206. CI static checks and both test shards are green. Local check:public did not finish within the host time limit, so its green status is CI evidence rather than my local result. In this headless preview playback did not advance for either the new video or the pre-existing Bitwarden video; I cannot claim independent playback verification, but found no new-video-specific defect. No blocking findings; @immakermatty can take the final look. No merge performed.
Status: ready for review — verified by the DEV-6631 lead (lint, typecheck, public-content check, the changed test files 70/70; headless screenshots of both cases); the guide video story was approved by Matěj on 2026-10-17.
Why
The public reference Organization
LazurioExampleOrganizationkeeps its Environments without a vault (root decision 0204): it is public and shared, and a Lazurio Vaultwarden answers only inside an Organization's tailnet (root decision 0203). On its Environments other than the visitors' (which have no Trezor at all, F55), Nastavení → Trezor showed only „Toto Prostředí zatím trezor nemá." That says neither how a vault works nor that there is deliberately none here, and its „zatím" (yet) is not true there. Matěj asked for a proper explanation with a motion graphic of a real Organization, and for the demo to say it has no vault on purpose.What changes
Nastavení → Trezor on an Environment without a vault now says why in the page's line and explains the vault under it:
no-tailnet): „Tato Organizace je veřejná ukázka a skutečná hesla do ní nepatří, proto v ní trezor záměrně není. Všechno ostatní funguje jako ve skutečné Organizaci." / "This Organization is a public demo and real passwords do not belong in it, so it has no vault on purpose. Everything else works as in a real Organization."no-vault): „Trezor tohoto Prostředí není nastavený. Nastaví ho Admin Organizace a pak ho najdete tady." / "This Environment's vault is not set up. The Organization's Admin sets it up, and then you will find it here."vault-overview, its player there from the start at its poster (nothing else of it loads before it plays, nothing plays by itself, no audio track), and three sentences: „V Organizaci má každé Prostředí vlastní trezor. Lidé do něj sdílejí hesla ze svého Bitwardenu a agenti v Prostředí je použijí bez ptaní. Sdílení můžete kdykoli vzít zpět." / "In an Organization, every Environment has its own vault. People share passwords with it from their own Bitwarden, and the Environment's agents use them without asking. You can take the sharing back at any time."How the two cases are told apart (same code for every Organization, no login named). The vault core reads it from the handover. Without a
vaultmember, an Organization's Environment whose handover has nonetworkmember isunsupported/no-tailnet; otherwise it staysno-vault. Machines writes nonetworkexactly for the public-entry work VMs of a platform-public Organization (root decision 0204; Machines'PUBLIC_ORGANIZATIONSlist, which holdsLazurioExampleOrganizationby its GitHub id and needs a root decision for any other) and asserts a Headscale selection for every other work VM; a personal VM always has one. No new declaration in Machines or the Organization's settings is needed.Also, so nothing else says "yet" there:
lazurio vault statussays "this Environment has no vault and gets none: it is reached without a private network (a public Organization's Environment), and a vault answers only inside one"; the Tools row says „V tomto Prostředí není k dispozici"; an agent's secret request is refused with the same reason and its page says „Toto Prostředí trezor nemá." Runtime secrets stayno-vault-identity.The video (
src/launchpad/videos/vault-overview-<cs|en>.mp4+.webp): HumanAndMachine-ai/design-system-lazurio#93, cutsvault/vault-enin the approved Lazurio video style. 23.8 s, H.264 High 1920×1080, 30 fps, no audio track, index first, 1.17 / 1.20 MB; posters 22 / 23 KB (the Organization with its vault and each Environment with its own). Five scenes, as approved: every Organization has its own vault → each of its Environments has its own → a person shares a login from their own Bitwarden into one (collection Agenti) → the Environment's agent finds it and signs in to an app → the person takes the sharing back; the Lazurio lockup with „Sdílení můžete kdykoli vzít zpět" / "You can take the sharing back at any time".Dev: the hosted preview takes
no-vaultorno-tailnet(bun scripts/preview-launchpad.ts hosted cs|en <port> owner no-tailnet).What intentionally does not change
entry.audience: "public", try-01) still has no Trezor section and its vault routes answer as absent (F55).Verified
bun run checkonffa17505: static gate green (biome lint,tsc --noEmit, check:public over 924 files, build:proof, smoke:proof);bun test3912 pass, 9 skip, 0 fail across 271 files.tests/vault-context.test.ts(nonetworkand no member →no-tailneton work, Team and Automated; withnetwork→no-vault; a member is the vault either way),tests/vault-page-view.test.ts(both lines word for word in cs/en with the explainer, the other reasons and a vault without it, no Bitwarden steps forno-tailnet),tests/launchpad-vault-page.test.ts(GET /api/vaultanswers both reasons; the page explains them),tests/launchpad-guide-video.test.ts(section order, the player's files and names in both languages, every video file's format),tests/vault-view.test.ts,tests/vault-requests-view.test.ts,tests/vault-cli.test.ts;tests/public-environment.test.tsunchanged and passing.no-tailnetandno-vault: the line, the heading, the player at its poster with its sentences, no vault row and no Bitwarden steps; before playing only the poster was requested, then the MP4 from byte ranges (206), playing and seeking; a 390 px wide screen; no page errors. Withpublic:/settings/vaultshows Obecné, no Trezor in the navigation.Direction note (2026-10-17 evening): Buddy will explain the page
Matěj decided on 2026-10-17 (relayed by the prototype thread, prototypes-lazurio #54) that Launchpad explanations will not be texts or diagrams on the page: the "?" opens Buddy, who points at the interface and plays the animation in place. This applies explicitly to the Trezor page. So:
Risks and open points
networkfor every other work VM (it asserts it today); HumanAndMachine-ai/Machines#597 asks Machines to state that in the handover contract. A second public Organization needs its own root decision before Machines lists it and would get the same words („veřejná ukázka"); that decision has to confirm or change them.Work context
147aa467-937c-4d0b-895c-9d8e8ba89499on matejsuchanek.local.HumanAndMachine-ai_GEN3/.worktrees/productionspace/LazurioPlatform/DEV-6631-vault-explainer, branchagent/DEV-6631-vault-explainerfrommain72fdf205.HumanAndMachine-ai/mission-control-data:v3,data/mission-control/plans/2026/09/DEV-6631-environment-agent-vault.yaml).docs/decisions.md.🤖 Generated with Claude Code
Note
Distinguish
no-tailnetandno-vaultvault reasons and addvault-overviewexplainer to Launchpadno-tailnetas a distinct unsupported vault reason: a handover with no vault and no network resolves tono-tailnet(Environment is public on purpose), while a handover with a network but no vault staysno-vault(Organization Admin has not set it up yet). See context.ts.vault-overviewguide video (Czech and English MP4/poster assets) rendered via a newopenmode in guide-video.ts that shows the video paused withpreload="none".no-tailnet; the preview script acceptsno-vault/no-tailnetflags to start an Environment without a vault.VaultPageViewgains anexplainerfield andvaultContextOfchanges reason precedence (no-tailnetwhen network is absent) — consumers of the old generic no-vault message or status text will see different wording.Macroscope summarized ffa1750.