From dc5d884036f8049ffb07231e086295fff9870736 Mon Sep 17 00:00:00 2001 From: Jiun Bae Date: Mon, 19 Oct 2026 10:57:23 +0900 Subject: [PATCH] chore(release): prepare 0.7.0 The dock (R15) is a new UI surface, so this is a minor release. Co-Authored-By: Claude Opus 5.5 (1M context) --- RELEASE_NOTES.md | 79 ++++++++++++++----- .../BarShelfKit/BarShelfMain.swift | 2 +- scripts/build_app.sh | 2 +- 3 files changed, 61 insertions(+), 22 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 52fc0ec..0c66488 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,23 +1,62 @@ -# BarShelf 0.6.1 +# BarShelf 0.7.0 > Unreleased. Requires macOS 14+ on Apple Silicon. -BarShelf 0.6.1 lets you refresh a desktop widget right where it sits, adds an -extra-large size, and lets widget authors say how their widget should look on -the desktop. - -## Changes - -- **Refresh from the desktop.** Medium and larger desktop widgets have a ↻ - button in their header; in the small size, the orange clock that marks an - old reading is the button. The widget shows that it is refreshing and - updates as soon as BarShelf has the new reading. -- **Extra large.** Desktop widgets come in an extra-large size: lists and - meters in two columns, and up to twelve file thumbnails. -- **A tip on the Shelf** says how to put BarShelf on your desktop, until you - dismiss it. -- **For widget authors:** `desktop.style` picks the layout BarShelf uses on - Automatic, `desktop.offer: false` keeps a widget off the desktop list, and - `desktopRole` on any node marks items (`item`), sets the title, value, - detail, or status, or leaves a node out (`hide`). See WIDGET-SPEC and - AGENTS.md §8B. Older versions of BarShelf ignore them. +BarShelf 0.7.0 adds an optional dock: apps, folders, links, Shortcuts, and live +widgets on a screen edge, alongside the Apple Dock or instead of it, with +profiles that can rearrange the Apple Dock too. Automation imports +Karabiner-Elements rules and can switch input sources the moment a shortcut +goes down. Desktop widgets refresh in place and come in extra large. + +## BarShelf Dock + +Off by default; turn it on in **BarShelf ▸ Dock**. See [the Dock guide](docs/DOCK.md). + +- **Alongside the Apple Dock, or instead of it.** "Instead" hides the Apple + Dock while BarShelf runs and brings it back when you quit or switch the mode + off (also after a crash, or with `barshelf dock restore-apple-dock`). +- **What goes in it:** apps (with open-app dots and drop-to-open), folders as + coloured tiles that open as a grid like the Apple Dock's stacks, files, + links, Shortcuts, spaces, dividers, the Trash, open apps that aren't in it, + recent apps, and **live widgets** — at icon height in Classic, as full cards + in Shelf. +- **Looks like the Apple Dock:** Liquid Glass, the Apple Dock's size by + default (it follows when you change it), magnification, names on hover, a + bounce while an app opens. +- **Profiles** (Work, Personal, …) each carry their own items, and can carry a + saved Apple Dock layout and a popup page. Switch with ⌃⌥1–9, a swipe or + ⌘-scroll on the dock, the BarShelf menu, `barshelf://dock?profile=…`, or + `barshelf dock use`. A Shortcuts automation lets a Focus switch it. +- **Full-screen apps:** the dock waits at the edge and slides out when the + pointer rests there. With more than one display it can follow the pointer. + +## Automation + +- **Import Karabiner-Elements rules.** Key-to-key mappings run natively on the + keyboard monitor; anything that would change behavior and can't be carried + over is reported before importing. +- **`barshelf.selectNextInputSource()`** switches to the next keyboard input + source as soon as its shortcut goes down, instead of when ⌘ comes back up as + the system's "Select next source" does. Bind it to ⌘Space and turn the + system shortcut off. See AUTOMATION.md. +- The keyboard monitor is recreated if macOS drops it, and failures are + reported instead of leaving the extension looking active. + +## Desktop widgets + +- **Refresh from the desktop.** Medium and larger widgets have a ↻ button; in + the small size, the orange clock that marks an old reading is the button. +- **Extra large:** lists and meters in two columns, up to twelve thumbnails. +- **For widget authors:** `desktop.style`, `desktop.offer: false`, and + `desktopRole` on nodes. See WIDGET-SPEC and AGENTS.md §8B. + +## Performance and reliability + +- Script widgets: output limits by size rather than message count, so a burst + of log lines no longer stops a healthy script; bounded stderr and timers. +- A widget reload no longer throws away refreshes already running for + widgets that didn't change. +- Memory/disk sampling is shared between widgets, and a slow volume no longer + holds up the others. +- Thumbnails, remote images, and folder watchers retry and clean up more + carefully. diff --git a/Sources/BarShelfCLI/BarShelfKit/BarShelfMain.swift b/Sources/BarShelfCLI/BarShelfKit/BarShelfMain.swift index cfbb46b..e5121e7 100644 --- a/Sources/BarShelfCLI/BarShelfKit/BarShelfMain.swift +++ b/Sources/BarShelfCLI/BarShelfKit/BarShelfMain.swift @@ -8,7 +8,7 @@ public enum BarShelfMain { /// Must match `APP_VERSION` in `scripts/build_app.sh`: `release.sh` refuses /// to package a release whose app and CLI report different versions, and /// `scripts/check-release-versions.py` catches the drift in CI first. - public static let version = "0.6.1" + public static let version = "0.7.0" public static let usage = """ barshelf — BarShelf widget developer CLI diff --git a/scripts/build_app.sh b/scripts/build_app.sh index 9655890..2d9b75a 100755 --- a/scripts/build_app.sh +++ b/scripts/build_app.sh @@ -13,7 +13,7 @@ APP_BUNDLE_NAME=${APP_BUNDLE_NAME:-"${APP_DISPLAY_NAME}.app"} BUILD_CONFIGURATION=${BUILD_CONFIGURATION:-release} OUTPUT_DIR=${OUTPUT_DIR:-"${PROJECT_ROOT}/dist"} BUNDLE_IDENTIFIER=${BUNDLE_IDENTIFIER:-com.barshelf.app} -APP_VERSION=${APP_VERSION:-0.6.1} +APP_VERSION=${APP_VERSION:-0.7.0} APP_BUILD=${APP_BUILD:-"$(date +%Y%m%d%H%M)"} # Provenance: which commit produced this binary. CFBundleVersion has to stay a # period-separated number for App Store validation, so the commit goes in its