Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: levelcodeai/levelcode
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.8.0
Choose a base ref
...
head repository: levelcodeai/levelcode
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v0.8.1
Choose a head ref
  • 6 commits
  • 5 files changed
  • 2 contributors

Commits on Jul 20, 2026

  1. 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>
    ndemianc and claude committed Jul 20, 2026
    Configuration menu
    Copy the full SHA
    72383a0 View commit details
    Browse the repository at this point in the history
  2. fix(ci): gate every extension's tests, not just levelcode-ai

    The pre-build test job did `cd extensions/levelcode-ai` before globbing, so
    extensions/levelcode-updater/test/*.test.js never ran in CI — including the
    regression test added in the S3 fix, which is the only thing standing between a
    feed change and the updater's Download button handing users a raw .app.zip.
    It protected the release it shipped in and nothing after that.
    
    The step now globs extensions/*/test/*.test.js, so a new suite is gated the
    moment it is added and there is no list here to drift out of sync. Requires in
    these tests are file-relative, so running from the repo root needs no cd.
    
    Also guards the vacuous pass: a zero-match glob previously reported success
    while gating nothing, which is the same class of bug as the one being fixed.
    It now fails with a ::error:: annotation.
    
    Verified locally under `bash -e` (the Actions default shell):
      - real run: 14 test files pass, up from 13
      - zero-match glob: exits 1 with the annotation
      - a deliberately failing suite: aborts the job, exit 1
      - release.yml still parses; all 3 jobs intact
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
    ndemianc and claude committed Jul 20, 2026
    Configuration menu
    Copy the full SHA
    404ef20 View commit details
    Browse the repository at this point in the history
  3. fix(build): keep git-describe's suffix so dev builds can't impersonat…

    …e a release
    
    Addresses the PR #24 review. Both comments were real; the first turned out to
    sit on top of a latent bug worth more than the wording fix it asked for.
    
    1. Regex vs stated intent. The comment claimed "a plain dotted version" while
       the regex allowed a -suffix. Rather than tighten the regex as suggested, the
       suffix is now REQUIRED behaviour and the comment says so — because dropping
       --abbrev=0 from `git describe` is the actual fix:
    
         at the tag (CI release):  v0.8.0              -> stamps 0.8.0
         off the tag (dev build):  v0.8.0-1-g404ef20   -> stamps 0.8.0-1-g404ef20
    
       With --abbrev=0 a dev build five commits past a release stamped a bare
       "0.8.0" and impersonated it in the UI — the exact class of confusion this PR
       exists to fix. Tightening to X.Y.Z would have locked that in, or failed dev
       builds outright once the suffix appeared. Junk ("v0.8", a branch name, an
       empty describe) still exits 1 and fails the build.
    
    2. %cI documented as "authored". The code was right and the prose was wrong, so
       the prose changed: "Released" means when the build's commit LANDED, and a
       cherry-picked commit's author date can predate the release by weeks — the
       stability %aI offers is stability around the wrong instant. Now stated
       explicitly in the script header, build-macos.sh, and the product.ts doc
       comment. (On every release commit to date the two are identical, since they
       are GitHub merge commits.)
    
    Verified: exact-tag input stamps 0.8.0; describe-suffix input keeps the suffix;
    "v0.8" / a branch name / empty all exit 1; typecheck-client exit 0; the patch is
    still 14 entries with the original 11 byte-identical, no de-brand contamination,
    and reverse-applies cleanly.
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
    ndemianc and claude committed Jul 20, 2026
    Configuration menu
    Copy the full SHA
    42e223c View commit details
    Browse the repository at this point in the history
  4. fix(ci): pin shell: bash on the test gate

    Addresses the PR #25 review: the step uses `shopt`, a bash builtin, but relied
    on the runner default rather than declaring the shell. True today on
    ubuntu-latest; pwsh on a Windows runner, where the step would break if the job
    were ever copied.
    
    Worth noting the fix is not purely defensive — `shell: bash` is not the same as
    the default. It runs `bash --noprofile --norc -eo pipefail` rather than
    `bash -e`, so the gate also stops inheriting profile files and gains pipefail.
    Both are improvements here, and neither changes this step's behaviour (it has no
    pipes). Updated the inline comment that credited "the Actions default" for the
    abort, since `-e` now comes from the pinned shell.
    
    Re-verified under the exact flags `shell: bash` invokes
    (`bash --noprofile --norc -eo pipefail`):
      - real run: 14 test files pass, exit 0
      - zero-match glob: exit 1 with the ::error:: annotation
      - a deliberately failing suite: aborts, exit 1
      - release.yml parses; test/build/draft-release intact; shell resolves to bash
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
    ndemianc and claude committed Jul 20, 2026
    Configuration menu
    Copy the full SHA
    d994b2a View commit details
    Browse the repository at this point in the history
  5. Merge pull request #24 from levelcodeai/fix/levelcode-version-in-upda…

    …te-ui
    
    fix(ui): show the LevelCode release version in the update tooltip and About
    ndemianc authored Jul 20, 2026
    Configuration menu
    Copy the full SHA
    ba941c1 View commit details
    Browse the repository at this point in the history
  6. Merge pull request #25 from levelcodeai/fix/ci-gate-all-extension-tests

    fix(ci): gate every extension's tests, not just levelcode-ai
    ndemianc authored Jul 20, 2026
    Configuration menu
    Copy the full SHA
    07b7341 View commit details
    Browse the repository at this point in the history
Loading