Skip to content

Commit daee02d

Browse files
NagyViktclaude
andcommitted
v1.34: lint hygiene so the v1.X tag and the Lint workflow agree
v1.33's release workflow shipped the .deb successfully, but the Lint workflow on that exact tag failed on a handful of pre-existing markdown issues — same shape as the v1.25 → v1.26 re-tag from May 19. This commit gathers all of them so the v1.34 tag is the first one in the v1.33 line that is green on every Lint job. `docs/overlay-references.md`: 17× MD032 lists missing surrounding blank lines (every `<topic>:` introduction immediately followed by `- item`). Fixed in-place with a blank line between each colon-terminated intro and the list that follows. `openspec/changes/flashpaste-overlayd-phase1-2026-05-20/CHANGE.md`: MD022/MD025 — `## §P proposal` ran directly into `# flashpaste-overlayd Phase 1 …` which is an H1 nested inside an H2 and also a second H1 in the document; demoted to H3 and added the missing blank line. MD012 — two consecutive blank lines collapsed to one. MD058 / MD022 — `## §S delta`, `## §T tasks`, and `## §B bugs` each ran into their tables with no blank line; added one and gave the tables explicit leading and trailing pipes so they're also MD055-clean. `openspec/plans/flashpaste-overlayd-phase1-2026-05-20/tasks.md`: 8× MD055 — the four data rows were `0|available|…|-|-` without leading or trailing pipes (the header row already had them, so the file was inconsistent). Re-added the pipes and surrounding spaces on each row. `README.md:7`: MD001 — the tagline was an `### h3` immediately under the `# FlashPaste` h1, skipping h2. Promoted to `## h2` which also matches the document outline (every other top-level section in the README is already `##`). `tests/click-through.md:14`: MD032 — `Source for detection:` ran directly into a `- …` list. Added the missing blank line. `CHANGELOG.md` link references: the markdown link-check job followed `[Unreleased]: …compare/v1.32...HEAD` and `[1.32]: …compare/v1.26...v1.32` to GitHub and both returned 404 because `v1.32` was bumped in the workspace but never tagged (mentioned in v1.32's notes). Updated `[Unreleased]` to `compare/v1.33...HEAD`, added `[1.34]: compare/v1.33...v1.34` and `[1.33]: compare/v1.27...v1.33` (v1.27 is the last actually-tagged release before the v1.33 line), and dropped the `[1.32]` reference entirely so the markdown heading no longer resolves to a dead URL. No behaviour change vs v1.33; the daemon, dispatcher, capture-clip helper, and packaging contents are byte-identical to the v1.33 build once the version literals are normalised. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent bd4fdca commit daee02d

13 files changed

Lines changed: 50 additions & 22 deletions

File tree

CHANGELOG.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ Release-tag policy: every `vX.Y` commit on `main` must be tagged and have a matc
66

77
## [Unreleased]
88

9+
## [1.34] - 2026-05-21
10+
11+
### Fixed
12+
13+
- CI hygiene rolled into a tagged release so the `v1.34` tag and the `Lint` workflow on the same commit agree. v1.33's release workflow shipped the .deb successfully, but the Lint workflow on that exact tag failed on pre-existing issues: `docs/overlay-references.md` MD032 (17 lists missing surrounding blank lines), `openspec/changes/flashpaste-overlayd-phase1-2026-05-20/CHANGE.md` MD022 / MD025 / MD012 / MD058 (proposal H1 nested inside an H2, doubled blank line, three tables without surrounding blanks), `openspec/plans/flashpaste-overlayd-phase1-2026-05-20/tasks.md` MD055 (table rows without leading / trailing pipes), `README.md:7` MD001 (h3 directly under h1, skipping h2 — promoted to h2), `tests/click-through.md:14` MD032 (list directly under a colon-terminated paragraph), and two dead links in `CHANGELOG.md` pointing at the never-tagged `v1.32` (now pointing at the existing `v1.33` / `v1.27` references). No behaviour change vs v1.33.
14+
915
## [1.33] - 2026-05-21
1016

1117
### Added
@@ -181,8 +187,9 @@ Release-tag policy: every `vX.Y` commit on `main` must be tagged and have a matc
181187

182188
Initial commit: sub-120 ms bash hot path for image-paste into GNOME Wayland TUIs.
183189

184-
[Unreleased]: https://github.com/NagyVikt/flashpaste/compare/v1.32...HEAD
185-
[1.32]: https://github.com/NagyVikt/flashpaste/compare/v1.26...v1.32
190+
[Unreleased]: https://github.com/NagyVikt/flashpaste/compare/v1.34...HEAD
191+
[1.34]: https://github.com/NagyVikt/flashpaste/compare/v1.33...v1.34
192+
[1.33]: https://github.com/NagyVikt/flashpaste/compare/v1.27...v1.33
186193
[1.19]: https://github.com/NagyVikt/flashpaste/releases/tag/v1.19
187194
[1.18]: https://github.com/NagyVikt/flashpaste/releases/tag/v1.18
188195
[1.17]: https://github.com/NagyVikt/flashpaste/releases/tag/v1.17

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
# FlashPaste
66

7-
### Paste screenshots into Claude Code, Codex CLI & Aider on GNOME Wayland — in ~15 ms
7+
## Paste screenshots into Claude Code, Codex CLI & Aider on GNOME Wayland — in ~15 ms
88

99
The missing clipboard glue between **GNOME · kitty · tmux** and your terminal LLM agent.<br>
1010
`PrtScr` → right-click → **Paste**. Image attached. Done.

docs/overlay-references.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
Study pass date: 2026-05-20.
44

55
Scope:
6+
67
- Cloned under `references/` and treated as read-only reference material.
78
- Read each `README.md`, dependency manifest/build file, and top-level `src/` listing.
89
- Used targeted source searches only to confirm layer-shell, GNOME, and rendering behavior.
910
- No code copied.
1011

1112
Reference snapshots:
13+
1214
- `references/wayscriber`: `feccd31`
1315
- `references/gromit-mpx`: `72eab92`
1416
- `references/gtk4-layer-shell`: `2a70cb0`
@@ -23,28 +25,33 @@ session, toolbar_icons, ui, plus main/lib/cli/runtime/support modules
2325
```
2426

2527
Layer-shell crates/libraries:
28+
2629
- Rust native Wayland stack.
2730
- `smithay-client-toolkit` provides `LayerShell`, `XdgShell`, compositor, output, seat, shm, activation, pointer-constraints, and relative-pointer helpers.
2831
- `wayland-client`, `wayland-protocols`, and `wayland-protocols-wlr` provide protocol bindings, including `wlr-layer-shell` and `zwlr_screencopy_manager_v1`.
2932
- Rendering dependencies include `cairo-rs`, `pango`, and `pangocairo`.
3033

3134
GNOME handling:
35+
3236
- README marks GNOME as partial support: portal fallback and windowed overlay.
3337
- Startup tries to bind layer-shell first. If it is unavailable, it logs desktop/session context and falls back to `xdg-shell`.
3438
- The fallback creates an undecorated xdg window, sets app id/title, requests fullscreen or maximized state, and uses xdg activation when available.
3539
- Capture/zoom/freeze paths can fall back to xdg-desktop-portal when compositor-native screencopy is unavailable.
3640
- Shortcut setup has explicit GNOME custom-shortcut support and separate portal shortcut behavior for non-GNOME environments.
3741

3842
Rendering:
43+
3944
- CPU-rendered Cairo into Wayland shared-memory buffers.
4045
- The surface code keeps a `SlotPool`, creates ARGB buffers, wraps buffer memory with `cairo::ImageSurface::create_for_data_unsafe`, draws with Cairo/PangoCairo, flushes, attaches the Wayland buffer, sends damage regions, and commits.
4146
- It uses frame callbacks for vsync and tracks dirty/damage regions to reduce redraw work.
4247
- No OpenGL rendering path was evident in the studied files.
4348

4449
Pattern to adopt:
50+
4551
- Keep a first-class capability split: layer-shell surface when available, xdg-shell fallback when not, and user-visible feature gates for capabilities that only work with layer-shell or screencopy.
4652

4753
Pattern to avoid:
54+
4855
- Avoid importing a whole annotation-app architecture into flashpaste. Wayscriber is broad: daemon, tray, boards, toolbar layers, session persistence, capture, zoom, and multiple UI systems. For flashpaste, keep the overlay path narrow and do not make the paste/screenshot hot path depend on a large in-process drawing app model.
4956

5057
## bk138/gromit-mpx
@@ -56,27 +63,32 @@ callbacks, config, coordlist_ops, drawing, input, main headers and C files
5663
```
5764

5865
Layer-shell crates/libraries:
66+
5967
- None. Gromit-MPX is not a native layer-shell implementation.
6068
- It is a C/GTK3/X11 application. `CMakeLists.txt` depends on `gtk+-3.0`, `xi`, `x11`, appindicator/ayatana-appindicator, and `liblz4`.
6169
- Wayland support is via XWayland, not `wlr-layer-shell`.
6270

6371
GNOME handling:
72+
6473
- README says it works on Wayland sessions using XWayland and requires XWayland if it cannot open a display.
6574
- `main.c` explicitly restricts GDK to the X11 backend with `gdk_set_allowed_backends("x11")`.
6675
- Under Wayland, hotkey grabbing does not work reliably through XWayland, so `input.c` detects GNOME and writes/removes GNOME custom shortcuts via GSettings. Those shortcuts invoke `gromit-mpx --toggle`, `--clear`, `--visibility`, `--quit`, `--undo`, and `--redo`.
6776
- Input pass-through vs active drawing is handled by changing the GTK input shape region on the transparent XWayland window.
6877

6978
Rendering:
79+
7080
- Cairo on GTK3/X11.
7181
- Uses a fullscreen `GTK_WINDOW_POPUP`, app-paintable transparent window, Cairo image backbuffers, and GTK draw callbacks.
7282
- Composited desktops use alpha/compositing. If no compositor is present, it falls back to legacy shape-extension behavior, which the README calls potentially slow.
7383
- Undo state is compressed with LZ4.
7484
- No layer-shell or OpenGL rendering path was evident in the studied files.
7585

7686
Pattern to adopt:
87+
7788
- Keep external commands as the control surface for a resident process. A simple `--toggle`/`--clear`/`--quit` style control API maps well to global shortcuts and avoids requiring UI focus.
7889

7990
Pattern to avoid:
91+
8092
- Do not use XWayland as the primary overlay strategy for flashpaste. It works as a compatibility path, but it brings compositor-specific shortcut hacks, input-shape edge cases, and a non-native Wayland model.
8193

8294
## wmww/gtk4-layer-shell
@@ -89,25 +101,30 @@ registry, xdg surface server, libwayland shim, stubbed surface, preload helper
89101
```
90102

91103
Layer-shell crates/libraries:
104+
92105
- C library for GTK4 applications, exposed through `gtk4-layer-shell-0` pkg-config and GObject introspection.
93106
- Depends on GTK4, `wayland-client`, and `wayland-protocols`.
94107
- Uses generated `wlr-layer-shell-unstable-v1` and `ext-session-lock-v1` client protocol bindings.
95108
- README points Rust users to external safe Rust bindings, but this repo itself is C.
96109

97110
GNOME handling:
111+
98112
- README is explicit: layer-shell is not supported on GNOME-on-Wayland or X11.
99113
- `gtk_layer_init_for_window()` returns with warnings when not on Wayland, when the libwayland shim is unavailable, or when the compositor does not expose layer-shell.
100114
- There is no GNOME overlay fallback. Consumers must provide their own xdg/portal/non-overlay behavior if GNOME matters.
101115

102116
Rendering:
117+
103118
- The library does not implement an app rendering pipeline. It turns GTK windows into layer-shell surfaces and lets GTK4 render normal widgets through its own renderer.
104119
- The source contains no custom Cairo/OpenGL rendering path in the studied top-level `src` files.
105120
- Internally it hooks xdg surface creation, maps it to a layer surface, forwards configure events, manages anchors/margins/exclusive zones/keyboard mode, and exposes GTK-friendly APIs.
106121

107122
Pattern to adopt:
123+
108124
- Isolate protocol-role plumbing behind a small API. The caller should say "make this window/surface a layer surface" and configure anchors, layer, namespace, and keyboard mode without spreading protocol details through app logic.
109125

110126
Pattern to avoid:
127+
111128
- Do not rely on gtk4-layer-shell alone if GNOME support is a requirement. It correctly treats missing layer-shell as unsupported, but flashpaste needs an explicit fallback path rather than a warning-only failure.
112129

113130
## Flashpaste Implications

flake.nix

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
flashpaste = pkgs.rustPlatform.buildRustPackage {
3030
pname = "flashpaste";
31-
version = "1.33";
31+
version = "1.34";
3232
src = ./.;
3333

3434
# Cargo workspace lives under rs/.

openspec/changes/flashpaste-overlayd-phase1-2026-05-20/CHANGE.md

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ slug: flashpaste-overlayd-phase1-2026-05-20
66
# CHANGE · flashpaste-overlayd-phase1-2026-05-20
77

88
## §P proposal
9-
# flashpaste-overlayd Phase 1 — references, protocol spec, crate scaffold, Rust message types
9+
10+
### flashpaste-overlayd Phase 1 — references, protocol spec, crate scaffold, Rust message types
1011

1112
## Problem
1213

@@ -46,15 +47,17 @@ Create rs/flashpaste-overlayd/src/protocol.rs. Implement #[derive(Serialize, Des
4647

4748
File scope: rs/flashpaste-overlayd/src/protocol.rs
4849

49-
5050
## §S delta
51-
op|target|row
52-
-|-|-
51+
52+
| op | target | row |
53+
| - | - | - |
5354

5455
## §T tasks
55-
id|status|task|cites
56-
-|-|-|-
56+
57+
| id | status | task | cites |
58+
| - | - | - | - |
5759

5860
## §B bugs
59-
id|status|task|cites
60-
-|-|-|-
61+
62+
| id | status | task | cites |
63+
| - | - | - | - |

openspec/plans/flashpaste-overlayd-phase1-2026-05-20/tasks.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
| # | Status | Title | Files | Depends on | Capability | Spec row | Owner |
44
| - | - | - | - | - | - | - | - |
5-
0|available|Prompt 1 — Read reference repos and write docs/overlay-references.md|`docs/overlay-references.md`<br>`.gitignore`|-|doc_work|-|-
6-
1|available|Prompt 2 — Write JSON-over-unix-socket wire protocol spec|`docs/overlay-protocol.md`|-|doc_work|-|-
7-
2|available|Prompt 3 — Scaffold the flashpaste-overlayd Rust crate|`rs/Cargo.toml`<br>`rs/flashpaste-overlayd/Cargo.toml`<br>`rs/flashpaste-overlayd/src/main.rs`|-|infra_work|-|-
8-
3|available|Prompt 4 — Define the wire-protocol message types in Rust|`rs/flashpaste-overlayd/src/protocol.rs`|1, 2|api_work|-|-
5+
| 0 | available | Prompt 1 — Read reference repos and write docs/overlay-references.md | `docs/overlay-references.md`<br>`.gitignore` | - | doc_work | - | - |
6+
| 1 | available | Prompt 2 — Write JSON-over-unix-socket wire protocol spec | `docs/overlay-protocol.md` | - | doc_work | - | - |
7+
| 2 | available | Prompt 3 — Scaffold the flashpaste-overlayd Rust crate | `rs/Cargo.toml`<br>`rs/flashpaste-overlayd/Cargo.toml`<br>`rs/flashpaste-overlayd/src/main.rs` | - | infra_work | - | - |
8+
| 3 | available | Prompt 4 — Define the wire-protocol message types in Rust | `rs/flashpaste-overlayd/src/protocol.rs` | 1, 2 | api_work | - | - |

packaging/aur/PKGBUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
# Source: GitHub release tarball (stable).
88

99
pkgname=flashpaste
10-
pkgver=1.33
10+
pkgver=1.34
1111
pkgrel=1
1212
pkgdesc="Sub-15ms image-paste glue for terminal AI agents on GNOME Wayland"
1313
arch=('x86_64')

packaging/aur/PKGBUILD-git

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
pkgname=flashpaste-git
99
_pkgname=flashpaste
10-
pkgver=1.33.r0.g0000000
10+
pkgver=1.34.r0.g0000000
1111
pkgrel=1
1212
pkgdesc="Sub-15ms image-paste glue for terminal AI agents on GNOME Wayland (git)"
1313
arch=('x86_64')

packaging/build-deb.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
set -euo pipefail
1515

1616
REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)"
17-
VERSION="${VERSION:-$(git -C "$REPO_DIR" describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "1.33")}"
17+
VERSION="${VERSION:-$(git -C "$REPO_DIR" describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "1.34")}"
1818
ARCH="${ARCH:-all}" # all = noarch (pure bash)
1919
STAGE="${STAGE:-$REPO_DIR/dist/staging}"
2020
OUT_DIR="$REPO_DIR/dist"

packaging/build-rpm.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
set -euo pipefail
1010

1111
REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)"
12-
VERSION="${VERSION:-$(git -C "$REPO_DIR" describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "1.33")}"
12+
VERSION="${VERSION:-$(git -C "$REPO_DIR" describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "1.34")}"
1313
RPM_TOP="${RPM_TOP:-$REPO_DIR/dist/rpmbuild}"
1414
OUT_DIR="$REPO_DIR/dist"
1515
SPEC="$REPO_DIR/packaging/rpm/flashpaste.spec"

0 commit comments

Comments
 (0)