Skip to content

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 22 Oct 15:34
· 57 commits to main since this release
62a94d4

Stamped now runs on macOS, and it reads a leaked archive the way it usually arrives: a folder per mailbox, each split into parts.

New

  • macOS builds for Apple Silicon and Intel, as a zipped Stamped.app.
  • Folder imports. stamped import reads a tree of mailboxes, names each mailbox after its folder, and imports the rest of the archive when one file is damaged.
  • A key store that you fill from the archive, from files or, only if you ask, from DNS (stamped keys). Stamped still never looks up a key on its own.
  • Every verdict explained in plain language, next to the evidence.
  • People and Timeline views, also on the command line (stamped people).
  • A status button in the header bar shows imports and key lookups while you keep working; stamped status shows the same in a terminal.

Fixed

  • After a small import, the window did not reload and kept showing the old count.
  • Blank lines in CRLF messages were changed on import, which could break a signature that was intact.
  • An archive key lookup counted rate-limited answers as missing keys.
  • On macOS, an interrupted import was shown as still running.

Known limits

  • On a very large archive the window can stop responding for a while. Moving the queries off the window's thread is planned for 0.3.0.
  • On a Mac without Homebrew, text can render in the wrong typeface (body text in Adwaita Mono), and the buttons and menus that come from GTK itself stay in English under a German locale. The bundled GTK runtime lacks a fontconfig configuration; the fix (gjsify/gjsify#2350) reaches Stamped in 0.2.1.
  • The Windows builds have not been tested.

First start on macOS

The app bundle is not signed or notarised, so macOS asks once per download:

  1. Unpack the zip and move Stamped.app to /Applications.
  2. Double-click it. macOS says it cannot verify the developer; close the dialog.
  3. Open System Settings → Privacy & Security, scroll to Security, click Open Anyway next to Stamped and confirm with your password.

Or run xattr -dr com.apple.quarantine /Applications/Stamped.app in Terminal.

What's Changed

  • ci: rebuild site after each release by @JumpLink in #4
  • feat: key store, lookups and keys CLI by @JumpLink in #5
  • Import mail archives into a case folder, and search them by @JumpLink in #6
  • Fetch missing keys automatically after import by @JumpLink in #7
  • ci: cover packages in format and lint by @JumpLink in #8
  • Verification window: verdicts, keys and the store screenshots by @JumpLink in #9
  • CLI UX: case argument, caveat counts, concurrent key fetch by @JumpLink in #10
  • Separate a wrong key from edited headers by @JumpLink in #11
  • Orange site branding by @JumpLink in #12
  • fix(store): name the errno when a write fails by @JumpLink in #15
  • perf(store): faster import, --progress=jsonl by @JumpLink in #16
  • Bundle the Node and GTK runtimes for macOS and Windows by @JumpLink in #17
  • docs: narrow real-leak screenshot exception by @JumpLink in #18
  • feat(gui): import via subprocess and lazy list by @JumpLink in #19
  • feat(import): import a folder tree of mailboxes by @JumpLink in #20
  • fix(import): name mailboxes in every progress line by @JumpLink in #21
  • feat: explain every verdict in plain language by @JumpLink in #23
  • Spike: local embedding models for semantic search by @JumpLink in #14
  • feat(semantic): add vector store and RRF fusion by @JumpLink in #24
  • feat(semantic): add node-llama-cpp embedder by @JumpLink in #25
  • feat: full case summary in report and overview by @JumpLink in #26
  • fix(gui): make case open and import work by @PhilippWaack in #22
  • perf(import): faster import on Gjs by @JumpLink in #27
  • feat: Personen and Zeitleiste views and CLI by @JumpLink in #28
  • fix(import): keep CRLF blank lines byte-exact by @JumpLink in #29
  • feat: import status file, stamped status, GUI banner by @JumpLink in #30
  • Reader: mail-like sheet and open in mail program by @JumpLink in #32
  • fix(import): surface sqlite errors in write path by @JumpLink in #33
  • feat(semantic): background vector indexer and probe by @JumpLink in #37
  • perf(gui): chunk refresh, async key lookup by @JumpLink in #35
  • fix(gui): one open-with button in header by @JumpLink in #38
  • fix: archive bulk lookup treated rate limits as misses by @JumpLink in #39
  • feat(gui): status button replaces import banner by @JumpLink in #40
  • perf(store): reuse prepared statements on import by @JumpLink in #36
  • ci(release): install pinned appimagetool by @JumpLink in #44
  • ci: run the pinned gjsify CLI after install by @JumpLink in #50
  • feat(gui): icon tabs, evidence help, slimmer verdict by @JumpLink in #43
  • fix(store): detect a dead import PID on macOS by @JumpLink in #47
  • fix(gui): start import subprocess on node by @JumpLink in #51
  • fix(keys): store each fetched key as it arrives by @JumpLink in #53
  • chore(gjsify): bump to 0.64.4 and drop hex BLOB shim by @JumpLink in #66
  • feat(semantic): state model and controller by @JumpLink in #49
  • fix(gui): reload after an import too fast to see by @JumpLink in #69
  • Import order, body height, and a page while a case opens by @JumpLink in #70
  • fix(cli): refuse an empty case folder by @JumpLink in #67
  • test: check the macOS app without Homebrew by @JumpLink in #54
  • test(keys): pin the clock in the 429 retry test by @JumpLink in #72
  • chore(release): 0.2.0 by @JumpLink in #71
  • feat(search): fuse text and semantic hits by @JumpLink in #48
  • fix(ship): bundle the soup bridge typelib on Linux by @JumpLink in #73
  • feat(release): ship the embedding model by @JumpLink in #52
  • ci(release): assert the arch-specific Linux names by @JumpLink in #80
  • fix(gui): drop the dark strip behind mail bodies by @JumpLink in #78
  • fix(gui): show the mailbox on archive rows by @JumpLink in #77

New Contributors

Full Changelog: v0.1.0...v0.2.0