You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(ui): show the LevelCode release version in the update tooltip and About
The update tooltip read "Current Version: 1.126.0 (cdf2549)" — a Code-OSS
version next to a LevelCode commit — and "Released 22 Jun 2026", the upstream
base's build date rather than the release the user installed. Reported after the
first real auto-update, where it reads as a different product entirely.
The commit was already right on purpose (build-macos.sh stamps LevelCode's HEAD
so releases are distinguishable to the update feed). Only the version and date
were still Code-OSS's, and `version` cannot simply be renamed: it is what
extensions' `engines.vscode` is validated against, so setting it to 0.8.0 would
reject every extension requiring ^1.x.
So the release identity rides alongside it:
- scripts/stamp-levelcode-version.mjs (new) stamps `levelcodeVersion` +
`levelcodeReleaseDate` into the BUILT app's product.json. Refuses anything that
isn't a plain dotted version (exit 1), so a bad `git describe` fails the build
rather than shipping "Current Version: v0.8".
- build-macos.sh runs it tag-derived, after the existing strip steps. No
reachable tag (dev builds) → skipped, and the UI falls back to `version`.
- The tooltip shows `levelcodeVersion ?? version`. About shows BOTH
("0.8.0 — Code-OSS 1.126.0") since it gets pasted into bug reports, where the
base version explains extension-compatibility behaviour.
Patch-workflow note: vscode/ is gitignored, so the three core edits are captured
in patches/levelcode-core.patch (11 -> 14 entries). Regenerating wholesale is
NOT safe here — the checkout is already de-branded, and a full regen pulled ~95
lines of de-brand's MS-doc-link stripping into the files.contribution.ts entry.
The existing entries are preserved byte-identical and only the three new ones
appended. CORE-PATCHES.md gains that escape hatch as NOTE 3, plus rows 12-14.
Verified: typecheck-client passes (exit 0); the stamp script leaves `version`
untouched, strips a v prefix, and exits 1 on a bad version; the 14-entry patch
reverse-applies cleanly to the checkout; the appended entries carry no de-brand
contamination and 6 [LevelCode] markers.
NOT verified: the rendered strings. That needs a full gulp build and a launched
app — see the PR for the check to run before the next release.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
# NOTE 1: use `diff HEAD` (not plain `diff`) — bootstrap's `git apply` may leave these STAGED,
43
46
# and plain `git diff` shows only UNSTAGED changes, silently dropping the staged patches.
44
47
# NOTE 2: regenerate BEFORE running de-brand.mjs. de-brand's global MS-doc-link sweep (pass 2) also
45
48
# strips links from `files.contribution.ts` (a patched file); if you regen after de-brand, those
46
49
# link-strips leak into the patch. Order: patch → regen → de-brand (this is also bootstrap's order).
50
+
# NOTE 3: if the checkout is ALREADY de-branded (the usual case after a build) do NOT regen wholesale —
51
+
# it silently fattened `files.contribution.ts` by ~95 lines of link-strips the one time we tried. Instead
52
+
# APPEND only the new file's entry to the existing patch, which stays valid because bootstrap applies it
53
+
# to a fresh, pre-de-brand checkout:
54
+
# git -C vscode diff HEAD -- <only/the/new/file.ts> >> patches/levelcode-core.patch
55
+
# Then verify: the pre-existing entries are byte-identical to before, the appended entry contains no
56
+
# `aka.ms`/`code.visualstudio.com` strips, and `git -C vscode apply --check --reverse` accepts it.
47
57
```
48
58
49
59
To find every core touch in the checkout:
@@ -74,6 +84,10 @@ compile-client` after touching a core file.**
74
84
| 10 |`api/node/loopbackServer.ts` (`getHtml`) | Replace the `this._appName === 'Visual Studio Code'` / `'… - Insiders'` branches (which embedded the VS Code stable/Insiders **shields**, falling through to the blue VS Code **"book"** default) with a single **LevelCode chevron** data-URI. | De-brand (WS-C/L5). A latent bug **and** a leak: `appName` is now "LevelCode" so no branch matched → every GitHub OAuth success page flashed a VS Code logo. `this._appName` is still used in the page text, so no unused-field error. |
75
85
| 11 |`chat/browser/chatSetup/chatSetupContributions.ts`|**Hide** the two GitHub Copilot sign-in call-to-actions (Accounts menu + title bar) with `when: ContextKeyExpr.false()`, and drop the two imports that becomes unused (`ChatEntitlementContextKeys`, `InEditorZenModeContext` — strict build). | De-brand (WS-A/B4). A sign-in funnel for an extension we don't ship. **Gated per MENU ITEM on purpose.** The previous attempt forced `IChatEntitlementService.setForceHidden(true)` instead — but `Setup.hidden` is upstream's *hide-ALL-chat/agent-UI* flag, not a CTA gate: it also gates `OPEN_AGENTS_WINDOW_PRECONDITION` (constants.ts), the **Agent Plugins view**, chat participants and several chat/plugin actions. That shipped in v0.6.0–v0.7.0 and made **Open Agents Window disappear from the Command Palette**. Never gate a de-brand on `Setup.hidden`; gate the item. |
76
86
87
+
| 12 |`src/vs/base/common/product.ts`| Add optional `levelcodeVersion` + `levelcodeReleaseDate` to `IProductConfiguration`. |`version` is the Code-OSS base (`1.126.0`) and **must stay 1.x** — it is what extensions' `engines.vscode` is validated against, so it cannot be renamed to the LevelCode release. These carry the human-facing release identity alongside it. Stamped into the built `product.json` by `scripts/stamp-levelcode-version.mjs` (run from `build-macos.sh`, tag-derived); both optional, so a dev build with no reachable tag still renders. |
88
+
| 13 |`update/browser/updateTooltip.ts`|`Current Version:` shows `levelcodeVersion ?? version`; `Released` prefers `levelcodeReleaseDate`. | The update tooltip read **“Current Version: 1.126.0 (cdf2549)” — a Code-OSS version next to a LevelCode commit**, and a “Released” date from the upstream base's build (months before the build the user installed). Reported as counter-intuitive after the first real auto-update. `Latest Version:` already used the feed's `productVersion` and needed no change. |
89
+
| 14 |`platform/dialogs/electron-browser/dialog.ts`| About shows `0.8.0 … — Code-OSS 1.126.0`, and the Date row prefers `levelcodeReleaseDate`. | Same root cause as #13, on the native About dialog. Keeps **both** here on purpose: About is pasted into bug reports, so the release version identifies the build while the base version explains extension-compatibility behaviour. |
90
+
77
91
## String + link rebrands — `scripts/de-brand.mjs` (NOT in the patch)
78
92
79
93
Content-based replacements — matched on the string, not its line number — so they survive upstream line
0 commit comments