build: release 1.22.0 - #1054
Merged
Merged
Conversation
The find bar shot is the same in every grid, the install and legacy-color shots document a listing and a deprecated setting, and the go-to-log flow is already a table. One find shot covers the rest. The 1_20 folder stays until 1.22.0 publishes: the README on the Marketplace fetches its images from main at view time.
Four changes land together because they share the same files: - point every image at lana/assets/1_22, and drop the five removed shots - graduate the inspector out of pre-release, so the badges and their legend go - reword the description, dropping the marketing adjective - replace em and en dashes with a comma or a hyphen The em dashes inside code spans stay: they are the literal cell a governor column shows when the log reported no limit.
lana.timeline.legacy and lana.timeline.colors now carry a markdownDeprecationMessage, so VS Code strikes them through and files them under Deprecated rather than leaving the warning in the body text.
You drive VS Code; the script owns the window size, naming, scaling, colour space and metadata, then checks that no EXIF or profile reached the repo.
A plain `tell application "Code" to activate` never returns: Electron does not answer the AppleEvent, so the script hung for the 120s timeout. The window list is also empty until the app is focused, which failed the sizing step with "Invalid index" (-1719). Both now go through System Events, and a missing window says so.
The script now builds the extension and opens sample-app in an Extension Development Host against a throwaway user-data-dir, instead of capturing whatever editor window happened to be frontmost. That fixes two things. The images come from the branch being released, not from another branch's window. And the chrome is identical every release - same theme, same font size, no sidebar, status bar or personal state - so no recent file, org name or account can reach a published image. Capture is the editor area rather than the whole window, matching how the existing screenshots are framed.
Raising the application brings forward whichever window it last had, which is one of your other editor windows - and if that one sits on another Space, macOS drags you to that Space mid-capture. AXRaise on the window whose title names sample-app picks out the host instead. The wait loop no longer focuses at all, since the window does not exist yet and a focus there raises the wrong one.
Two fixes. The host now opens on the lana-dev profile from AGENTS.md instead of a seeded throwaway one, so the shots carry the layout you actually work in. Finding the window failed because the accessibility window list reads as empty until the app is focused, and the previous change had removed focusing from the wait loop to stop it raising the wrong window. The loop focuses the app again, which is safe while the host is starting, and the per-shot raise still targets the host by name. When nothing matches, every open title is listed.
Each shot now names the tab, the view, what is selected, how far the tree is expanded and where the pointer must not be. The old one-liners left the answer in the previous image, which is the one thing a re-capture cannot read.
Written as workspace settings on sample-app, not into the lana-dev profile, which other windows share. sample-app/.vscode is gitignored, so the file never reaches the repo. The side bar has no setting - it is UI state - so the script says to press CMD+B once. VS Code remembers that per workspace afterwards.
Writing workspace settings would have stuck: sample-app keeps them, so every later dev-host session on that folder loses its activity and status bars.
The panel answers differently per tab - self time by namespace on the Timeline, findings on Analysis, query plan and SOQL issues on Database - so four shots with it docked are four different pictures, not one repeated. inspector.png takes the state none of them can hold: nothing selected, the whole-log overview. The three stitched call tree views and the Memory view keep it closed, since those need the width for their columns.
Two detail, two summary, so each panel shows what no other shot can: the namespace split on the Timeline, the hot path and hot spots on the Call Tree, findings and the self time spread on Analysis, and the query plan and SOQL issues on Database. Analysis carries a note to drag the Findings divider up, since that section soaks up the free space until its fit is fixed.
…election The whole-log view is what a log opens in, and each tab answers it differently - time by category and the namespace split, the hot path and hot spots, findings and the self time spread, namespace and database duration. Four tabs, four answers. The detail panels were the weaker set: three of the four were Details, Call stack and Call tree over different data. inspector.png now carries the only selection, on a SOQL statement, where the panel shows a query plan and SOQL issues that no whole-log view holds.
sample-log.log is logged at APEX_PROFILING FINE and holds no HEAP_ALLOCATE, so net, gross and peak have nothing to show. The entry stays in the file as a comment, with the LOG= line that captures it from a log that does.
Capture the shots from the branch's own build, so the images match the version being released. Each shot carries its setup, the width its page renders it at, and is re-prompted when a capture lands under 2x that. Add mov-to-gif.sh for the README hero. A screen recording reports a frame rate it does not deliver, so the real rate is worked out from the frames and handed back on the input; left alone it stretches the clip into slow motion.
Recapture every shot at twice the width its page renders it at. Size each one to what it holds, instead of a single 400px cap that squeezed a window-wide strip down to unreadable. Replace the minimap and governor strip gifs with stills, and give the inspector its own shot in the README and on its docs page.
The code lens and the custom themes settings were still the 1.20 files, and both pages render them wider than they were, so both were scaled up.
imgcmp opens a pull request for any image it can still shrink, so a release ships bytes it has already been asked to fix. Run its own commands at capture time instead, from capture.sh and from mov-to-gif.sh, which writes the gif long after a capture run has ended. Keep only a result that is smaller. gifsicle does not converge on preview.gif, so without that every capture leaves a multi-megabyte binary dirty for a few dozen bytes. Capture the analysis lens as png, so the shot and its compression stay lossless from here on. cwebp carries no quality flag, so a webp lost a little each pass.
8.21MB down to 7.15MB, every pixel unchanged.
The screenshot step still described shooting every view by hand, and predates capture.sh, mov-to-gif.sh and compress.sh. Add the two scripts that hold the asset folder as their default output to the find/replace list, and widen the verify grep to reach them. Neither fails when that folder name is stale.
lcottercertinia
approved these changes
Sep 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📝 PR Overview
Cuts the 1.22.0 release. Bumps the version, lands the changelog entry, deprecates
the legacy Timeline settings, refreshes every README and docs screenshot against
this branch's own build, and adds the scripts that capture and compress them.
The feature work itself is already on
main— see the1.22.0 changelog entry for what ships.
🛠️ Changes made
lana.timeline.legacyandlana.timeline.colorsdeprecated so VS Code strikes them through and files them under Deprecated.lana/assets/1_22/, re-shoot them from this branch's build, and droplana/assets/1_20/.scripts/screenshots/capture.sh— builds the extension, openssample-appin an Extension Development Host, and stops before each shot with its setup written out. Each shot records the width the docs render it at, and is re-prompted when a capture lands under 2x that.scripts/screenshots/mov-to-gif.shfor the README hero. A screen recording reports a frame rate it does not deliver, so the real rate is derived from the frames and handed back on the input.scripts/screenshots/compress.sh— runs the same optimizer commands as.github/workflows/imgcmp.yml, so a release ships images CI cannot shrink and no optimize PR comes back. Keeps only a smaller result, sincegifsicledoes not converge onpreview.gif.cwebpcarries no quality flag, so a webp lost a little on every CI pass; png keeps the round trip lossless.🧩 Type of change (check all applicable)
🔗 Related Issues
Release PR — the issues fixed in 1.22.0 are linked from the changelog entry.
✅ Tests added?
Docs, images and shell tooling only.
pnpm lintpasses.📚 Docs updated?
Anything else we need to know?
RELEASING.mdstep 1 still describes capturing screenshots by hand and does notmention these scripts. Worth a follow-up.