Repository navigation
release, web, docs: the distribution Lazurio T3 Code, the in-app name T3 Code (Lazurio) and the design system's light look (root 0200) - #66
Conversation
… T3 Code Root decision 0200 makes the fork the distribution "Lazurio T3 Code": T3 Code with the Lazurio overlay, the way Lazurio/vaultwarden is Lazurio Vaultwarden. T3 Code's mark stays in the app; the distribution's name goes where the distribution is published. Releases were titled "T3 Code vX.Y.Z-lazurio.N", the image carried only its source, revision and version labels, and the only issue forms were upstream's, which send feature requests upstream. - Releases are titled "Lazurio T3 Code v<version>", previews the same way. The notes open "Lazurio T3 Code, a modified distribution of T3 Code <upstream tag> for Lazurio Environments", keep the preview note, the evidence and the overlay's commits, and end with a line that links the exact source commit and says the release is MIT licensed like T3 Code, with T3 Code's LICENSE in each archive and the image. - The image carries the OCI labels title, description, licenses (MIT), url and vendor, with the same values in the release workflow and in Dockerfile.lazurio, so CI's image has them too. The description is the repository description root decision 0200 names. - A new issue form, first in the chooser, asks for the problem, the area of the overlay, the version, and whether upstream T3 Code has it too. It sends security reports to the repository's private vulnerability reporting. Upstream's forms and their config stay as they are. - The release contract asserts the title, the notes' first and last lines, that they say Environment and never Machine or vanilla, the five labels in both places and the issue form. The guard that forbade a branding overlay now forbids what would actually hurt: a mount path, or a hosted app variable, whose channel would switch the web client into app.t3.codes mode. Published releases keep their titles and notes. Nothing in the app changes here. Private vulnerability reporting is a repository setting and still needs to be turned on before the form's sentence holds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Root decision 0200 point 2: in the app, T3 Code on a Lazurio Environment is "T3 Code (Lazurio)", with the label "Lazurio" beside the wordmark, and the fork's previews stop calling themselves "Nightly". The fork's builds said "T3 Code (Alpha)" in the tab, the pairing, 404 and error pages and the error report; a preview (X.Y.Z-preview.YYYYMMDD.N) said "T3 Code (Nightly)" and drew upstream's nightly artwork, because upstream reads that version shape as a nightly. The fork's previews are canaries of the next stable release. - branding.ts: the stage label of a production build is "Lazurio" where upstream's is "Alpha", so the display name is "T3 Code (Lazurio)". Development builds keep "Dev"; desktop branding and upstream's hosted app channels still win. The product name stays "T3 Code". - branding.logic.ts: only X.Y.Z-nightly.YYYYMMDD.N reads as a nightly, so a preview keeps the build's own label, without the nightly artwork. - SidebarChrome.tsx: the label stands beside the wordmark in the slot upstream gives its Dev and Nightly pills, upstream's own badge, in every identification mode. The stage label alone never reaches the sidebar: upstream shows a pill only for Dev and Nightly, and only in pill mode. - index.html: the page title, the splash's label and its image's alt text say "T3 Code (Lazurio)" before the app sets the title. - manifest.webmanifest: name "T3 Code (Lazurio)", short name "T3 Code" (upstream's had neither, so an installed app took the page title). - branding.test.ts: a production build is "T3 Code (Lazurio)", development stays "T3 Code (Dev)", and a preview keeps the fallback label; envs are unstubbed after each test. - Allowlist: a group for the name; index.html moves to the shared seams, since the shell slot and the name both change it. The release contract pins the label, the logic, the seam beside the wordmark, the title, the splash and the manifest, and that the wordmark, the web client's icons and assets/ are byte for byte upstream's. The wordmark, the icons and the prose strings that say "T3 Code" stay upstream's. Outside the fork's builds nothing changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Root decision 0200 point 4: on a Lazurio Environment, T3 Code's web client takes the Lazurio design system's colours, type and radii in its standard light look. A theme the person picks and the dark mode stay T3 Code's palettes until the design system has a dark UI, and without Lazurio's shell T3 Code looks as upstream. The Environment's shell (LazurioPlatform F36's addendum of 2026-10-13) declares the design system's tokens (--lz-*) on the document's root and marks it data-lazurio-theme="light"; a design system change then reaches Chat with a Platform release, not a fork release. - apps/web/src/lazurio/theme.css maps them onto T3's own raw tokens in two rules, both behind :root[data-lazurio-theme="light"]:not([data-theme-id]) :not(.dark): the document's root, and T3's sidebar palette scope ([data-app-sidebar]), which the shell's rail joins. White surfaces and a paper sidebar, ink text, black buttons, gray selections one step darker, hairline lines, neutral focus, the signal colours and the one blue for links and the update notice, Inter Tight and Geist Mono (the shell declares their faces), a 6 px control radius and no grain. The switch's active tab (white) stays apart from its track (gray-100). - It writes no --contrast-* token, so the contrast setting keeps deriving foregrounds and borders from the new values; no --app-theme-* role, so a picked theme and the theme editor stay T3's; no --lazurio-* role, so the shell's colour roles follow by themselves; and no colour literal. A font chosen in Appearance is inline on the root and still wins. - main.tsx imports it right after index.css; main.tsx moves to the allowlist's shared seams (the prepared prompt and the look). - The release contract keeps the import's place; both rules' gate and its value; only raw tokens that index.css declares in the same scope; values that are only var(--lz-*) of the 23 names this mapping reads, each promised by the shell's interface v1, or no grain; the fonts, the radius and the grain; the switch's two tokens apart; and T3's theme mapping behind data-theme-id. The colour roles' test is unchanged. Gaps the mapping cannot reach: no dark palette, T3's literal shadows and glass, its wider radius scale, size preferences and Lucide icons. The look needs the Platform release with the tokens on the Environment first; until then nothing here matches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…look Root decision 0200 replaces what the runbook said about the look: "T3 Code nepřebarvujeme ani nepřejmenováváme" (0179 point 6) no longer holds. Chat is the distribution Lazurio T3 Code, T3 Code's mark stays, the app is "T3 Code (Lazurio)", and on a Lazurio Environment its standard light look is the design system's. - The intro names the distribution, a modified distribution of T3 Code for Lazurio Environments (the words the release notes use, root decision 0170), adds the name and the look to what the overlay changes and to what it changes in the web client's UI, and says the T3 Code mark stays. - The Overlay table gets row 16 (the in-app name) and row 17 (the look), each with why it stays at the rebuild. Row 5 adds the issue form and the distribution's name. The paragraph below the table says the look shows only where the Environment offers it, and that every build of the distribution is named "T3 Code (Lazurio)". - Cílový stack lists rows 16 and 17 with their files, marks index.html and main.tsx as shared, and counts the issue form among the distribution files. - A new section "Jméno a vzhled" says what the releases, the image and the issue form carry, where the name and the label beside the wordmark show, what the stylesheet maps and behind which gate, what stays T3's (themes, dark mode, contrast, Appearance fonts, shadows, icons), what holds without the shell, what the fork may rely on from the Platform, the release order, and what the release contract keeps. The shell section points to it instead of 0179 point 6, and notes that the rail follows the look, grain included. - The canary check gains the name and the look; the publish step names the release title and the image's labels. Docs only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
d8f60bd to
d2d85a9
Compare
agentrozjedemeai
left a comment
There was a problem hiding this comment.
Blocking public-security-reporting prerequisite on exact head d2d85a9: .github/ISSUE_TEMPLATE/1-lazurio-t3-code.yml tells people with a security problem to use Security → Report a vulnerability, but the repository currently reports private-vulnerability-reporting: {"enabled":false} via the GitHub API. Merging this PR immediately publishes the form and sends reporters to a private route that does not exist; the issue chooser also disables blank issues. Please have an Admin enable private vulnerability reporting and verify the route before merging, or change the form to direct reporters to a working private channel. Once that is resolved, request a fresh exact-head review. The stylesheet gate excludes dark mode and any data-theme-id (including the editor preview), contrast is still derived from the raw tokens, the sidebar label seam and allowlist are scoped, the 23 token names match Platform interface v1, and the public prose contains no person or organization names beyond product/provider branding. Local release contract: 29/29 passed; the exact-head CI checks are green. I did not independently run the Vite branding suite in this isolated clone because dependencies are not installed; the exact-head CI reports it green.
agentrozjedemeai
left a comment
There was a problem hiding this comment.
@immakermatty Re-review of exact head d2d85a9: APPROVED. The prior blocker was external configuration, not code: GitHub now reports private-vulnerability-reporting enabled=true, so the issue form’s Security → Report a vulnerability instruction has its private route. The repository description and homepage also match D7. No commit changed. I reran the release contract in an isolated clone (29/29 pass), checked git diff --check, and confirmed exact-head CI run 38448504813 succeeded, all four required checks pass, no unresolved review threads, current base 68f22f2, and mergeable=true. Platform pingdotgg#375 remains a release-order dependency; the canary visual checks remain for preview. Please refresh the PR description’s now-stale statement that private vulnerability reporting is off before merge.
…rom T3 Code GitHub shows .github/README.md in place of the root README, which stays byte-equal to upstream's. The new page names the distribution (root decision 0200 of the Lazurio project: "Lazurio T3 Code", a modified distribution of T3 Code), says it is not an official T3 Code release and that problems with it belong here, and explains what differs: the Environment browser in the web client's right panel first, then the Lazurio Folder project, the name and the light look on a Lazurio Environment, the shell, prepared prompts, hosting behind a reverse proxy and updates from this repository. It also says how main tracks upstream's stable releases, what the stable and preview channels are, where to report problems (security ones privately, through the Security tab), and credits T3 Code with its MIT licence. Impact: documentation only. It describes the managed Folder as phase A part 2 (#65) leaves it and the name and look of #66, so it merges after both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rom T3 Code GitHub shows .github/README.md in place of the root README, which stays byte-equal to upstream's. The new page names the distribution (root decision 0200 of the Lazurio project: "Lazurio T3 Code", a modified distribution of T3 Code), says it is not an official T3 Code release and that problems with it belong here, and explains what differs: the Environment browser in the web client's right panel first, then the Lazurio Folder project, the name and the light look on a Lazurio Environment, the shell, prepared prompts, hosting behind a reverse proxy and updates from this repository. It also says how main tracks upstream's stable releases, what the stable and preview channels are, where to report problems (security ones privately, through the Security tab), and credits T3 Code with its MIT licence. Impact: documentation only. It describes the managed Folder as phase A part 2 (#65) leaves it and the name and look of #66, so it merges after both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Status: ready for review. Rebased on
main68f22f288(#65 merged); fork CI is green on the exact headd2d85a96c(run 38448504813: format, lint 0 errors, typechecks, the overlay's tests withbranding.test.ts10/10, contract 29/29, the image, both CLI archives and the launcher install). Before the rebase it was green ond8f60bd76too (run 38383261563, run 38444949761). The look needs LazurioPlatform pingdotgg#375, which is merged and in v0.1.8-rc.65 on the canary Environment; on an older Platform this release looks like upstream and is only named "T3 Code (Lazurio)". The issue form's security sentence has its private route: private vulnerability reporting was enabled on 2026-10-13 (plan decision D6).Why
Root decision 0200 (HumanAndMachines/Lazurio#539) makes Chat the distribution Lazurio T3 Code, a modified distribution of T3 Code, the way
Lazurio/vaultwardenis Lazurio Vaultwarden:What changes, commit by commit
release: releases, the image and an issue form carry the name Lazurio T3 Code(distribution files only)Lazurio T3 Code v<version>, previews too.<upstream tag>for Lazurio Environments", speak of Environments, and end with a line that links the exact source commit and says the release is MIT licensed like T3 Code, with T3 Code's LICENSE in each archive and the image.title,description,licenses=MIT,urlandvendor, the same inlazurio-release.ymlandDockerfile.lazurio..github/ISSUE_TEMPLATE/1-lazurio-t3-code.yml, first in the chooser. Upstream's forms, their config andSECURITY.mdare unchanged.VITE_HOSTED_APP_CHANNELwould switch the client into app.t3.codes mode).feat(web): the in-app name T3 Code (Lazurio)(new Overlay row 16)branding.ts: a production build's stage label isLazuriowhere upstream's isAlpha. The display name becomes "T3 Code (Lazurio)" in the tab, the pairing, 404 and error pages and the error report. Development stays "T3 Code (Dev)", and desktop branding and upstream's hosted channels still win.branding.logic.ts: onlyX.Y.Z-nightly.YYYYMMDD.Nreads as a nightly, so a fork preview keeps the build's label and loses the nightly artwork.SidebarChrome.tsx: the label stands beside the wordmark, in the slot upstream gives its Dev and Nightly pills, with upstream's own badge, in every identification mode. This seam is needed because the stage label alone never reaches the sidebar. Upstream identifies only Dev and Nightly there: artwork (the default mode), a pill (pill mode) or nothing (none). For any other label (Alpha,Latest,Lazurio) it shows nothing in all three modes.index.html: the page title, the splash's label and its image's alt text.manifest.webmanifest:name"T3 Code (Lazurio)",short_name"T3 Code". Upstream's manifest had neither.branding.test.tscovers a production build, a development build and a preview, and unstubs envs after each test.index.htmlmoves to the shared seams (shell slot and name).assets/are byte for byte upstream's.feat(web): the design system's light look on a Lazurio Environment(new Overlay row 17)apps/web/src/lazurio/theme.cssholds two rules, both behind:root[data-lazurio-theme="light"]:not([data-theme-id]):not(.dark): one on the root and one on T3's sidebar palette scope[data-app-sidebar], which the shell's rail joins.What the mapping gives:
--control-radius6 px and no grain;It writes only T3's raw tokens: no
--contrast-*,--app-theme-*or--lazurio-*, and no colour literal. The contrast setting keeps deriving from the new values, a picked theme and the theme editor stay T3's, the shell's colour roles follow by themselves, and a font chosen in Appearance still wins.main.tsximports it right afterindex.cssand moves to the allowlist's shared seams (prepared prompt and look).The contract keeps:
index.cssdeclares in the same scope;var(--lz-*)values of the 23 names the mapping reads (or no grain);data-theme-id.The colour roles' test is unchanged.
Tokens read (23, exactly the names the shell's interface v1 promises at LazurioPlatform Plan mode, alternative answer for clarifying questions. Text cursor is stuck pingdotgg/t3code#375 head
e8060d1a):--lz-surface,--lz-paper,--lz-ink,--lz-ink-muted,--lz-line,--lz-accent,--lz-accent-button,--lz-accent-button-hover,--lz-on-accent,--lz-gray-50,--lz-gray-100,--lz-red-500,--lz-danger,--lz-danger-bg,--lz-warning,--lz-warning-bg,--lz-green-500,--lz-success,--lz-info,--lz-info-bg,--lz-font-sans,--lz-font-mono,--lz-radius-sm.docs: the fork runbook records the distribution's name and the light lookindex.htmlandmain.tsxas shared.Each commit passes the contract test and the allowlist guard on its own.
What deliberately does not change
.github/README.md, PR docs: a README and a security policy that say what Lazurio T3 Code is and where to report its problems #67) and its security policy: separate. The repository description, homepage and private vulnerability reporting were set outside this PR (plan decisions D6 and D7). The rootREADME.mdstays upstream's.APP_BASE_NAMEstays "T3 Code") and the prose strings that say "T3 Code".t3,t3code.service,T3CODE_*, storage keys) and archive names.Verification
Local, in the worktree at
d2d85a96c(Node 26.5, pnpm 11.10 viavp):node --test scripts/lazurio-release-contract.test.mjs: 29 pass, 0 fail at the head (lazurio: the managed Folder behaves as upstream without its variable and lives in the overlay folder; overlay cleanup; Czech welcome #65's Folder seam test included), and green at each of the four commits (27, 28, 29, 29 tests). The CI allowlist guard, run locally on each commit, passes. Each new guard was broken on purpose once and the contract failed every time: 10 mutations for the distribution, 10 for the name (including a byte change inassets/and in the wordmark), 18 for the look.vp test run --project unit src/branding.test.ts: 10 passed. Reverting the stage label toAlpha, or the preview rule, fails one test each.vp fmt --check: all 4228 files formatted.vp lint --report-unused-disable-directives(the Lint step lazurio: the managed Folder behaves as upstream without its variable and lives in the overlay folder; overlay cleanup; Czech welcome #65 added): exit 0, with upstream's existing warnings and none in a file this PR touches.vp run --filter @t3tools/web typecheckandvp run --filter t3 typecheck: exit 0.t3 v0.0.45-lazurio.0, the session TTL, LICENSE, the production favicon) and both CLI archives with their smoke and launcher install. Locally, CI's image step passed aslinux/amd64(the release's platform; an arm64 build fails before this change too, since@effect/tsgoships no linux-arm64 binary).docker image inspectread back the five labels, and the built client has the title, the manifest names and the stylesheet. The archives need a Rust toolchain this machine does not have, so they are CI's.In a browser (root decision 0178), Chrome 155 headless at 1440×900 @2x:
main(35a31c03e, "before") and of this branch before its rebase (d8f60bd76, "after"). The files this PR changes in the web client, andindex.css, are byte-identical at the rebased head.0.0.45-lazurio.0and at0.0.45-preview.20261013.1.--lz-*tokens of LazurioPlatform Plan mode, alternative answer for clarifying questions. Text cursor is stuck pingdotgg/t3code#375 (7d7e3b74) in one style first in<head>, the shell's font faces served from/.lazurio/fonts/, and<html data-lazurio-theme="light">. All of it lived in a scratch harness outside the repository.Results:
rgb(255,255,255), sidebarrgb(251,250,249), primaryrgb(9,9,9), Inter Tight Variable with both faces and Geist Mono loaded, control radius 6px, no grain. The switch's active row isrgb(255,255,255)against its trackrgb(236,235,234). In themainbuild the mark changes nothing (0 px, light and dark).Screenshots and the metrics (
results.json) are local, in~/Lazurio/drafts/DEV-6646-polish/shots/pb-t/:01–10: before/after pairs of each state;08-diff-hunks-with-mark-*: the expanded diff hunks;11-sidebar-czech*: the sidebar at 3x;12-name-*and12-name-montage.png: the name on stable and preview servers;13-identification-*and13-identification-montage.png: the three identification modes on a preview server.What to check on a canary
On an Environment whose Platform has pingdotgg#375, after a preview of this branch:
On an Environment with an older Platform, T3 looks as upstream with the new name. Also check the release itself:
docker image inspectshows the five OCI labels.Risks
font-display: swap, so a first load may flash the fallback font.🤖 Generated with Claude Code