Skip to content

SAM v3.2.1 — The Deliverable

Choose a tag to compare

@richhabits richhabits released this 03 Aug 10:42
· 511 commits to main since this release
0b4d6cd

3.2.0 was withdrawn — it did not launch. This is that release plus the one-line fix that makes it start. Everything below is what 3.2.0 was going to bring.

3.2.0 did not launch. Please use this one.

Fixed

  • The packaged app crashed on startup. better-sqlite3 13 moved its native binary from
    build/Release/better_sqlite3.node to prebuilds/<platform>-<arch>.node, and the code that
    points the app at that binary still looked only at the old location. Missing it is silent: the
    app then let the library find its own copy, the library looked inside the read-only archive
    where no such file can live, and the whole thing died before the first window. Confirmed on
    Apple Silicon and Windows.

    Nothing in the test suite could have caught it — the tests, the type check and the linter all
    passed, because none of them run the packaged app. What caught it was the smoke test that
    boots the real build, after the installers had already been uploaded. 3.2.0 has been withdrawn.

    Both layouts are now checked, and a test asserts that the installed library still keeps its
    binary somewhere the app looks — so the next version that moves it fails in a second instead of
    in a release.

SAM hands you something now. Ask for a deck and get a deck; point it at a spreadsheet and get
what's wrong with the data rather than the data back. And the phone stops being a viewer.

Added

  • Slide decks. Ask for one and SAM writes the whole thing — structure, content, a
    presentable HTML file saved to your vault. It opens offline and prints to PDF, because the
    deck is a single self-contained file with nothing loaded from anywhere. No charts for exactly
    that reason: charting libraries come from a CDN, and a deck that needs the internet to render
    is not a file you can rely on in a room.
  • Spreadsheets and CSVs, read properly. analyse_data profiles a file instead of dumping
    it: what each column actually is, and then the things that are wrong with it — duplicate rows,
    columns that are 90% empty, one column holding two kinds of value because someone typed "N/A"
    into a number field, values sitting miles outside the rest. Those findings are the point; the
    table is the evidence. Bounded (8 MB / 50k rows) and it tells you when it truncated, because
    stats over a silently clipped sample are worse than no stats.
  • Home and Lock Screen widgets on the phone. Quick actions that open SAM ready to go. A
    widget link pre-fills what you're about to say — it does not send it, because any app on your
    phone can open a URL and none of them should be able to put words in SAM's ear.
  • @ a past task on the phone. Type @, pick something SAM did earlier, and its context
    rides along with your next message.

Changed

  • The Pocket works on iPad. It claimed to since the day it shipped and nothing in it ever
    looked at the window size, so on a 12.9" screen it stretched rather than adapted — chat set to
    a thousand-point line, a pairing form running the full width. It now lays out for the window
    it is actually in, which is the honest test: an iPad in Slide Over is a phone-shaped sliver and
    should look like one.
  • The app icon is SAM's own mark, drawn at full resolution instead of a different picture
    scaled up.
  • brew install --cask richhabits/tap/sam tracks releases again. The cask had been stuck at
    v1.5.0 for six months while the step meant to bump it skipped in silence. The tap updates
    itself now — nothing to provision, nothing to forget.

Fixed

  • Seven more read routes were open to any program on your machine. The 3.1.1 sweep stopped at
    files; these read you — a running account of what SAM did and what it asked you to approve,
    what it has learned about you, the folders you watch, your usage. /api/proactive was the
    worst of them: reading it drained it, so anything that asked ate your briefings instead of
    copying them. None of it is a credential, which is exactly why it was passed over twice.
  • Several smaller ones found by turning the security scanner up rather than waiting: a biased
    draw in a pairing code, a regex an attacker could make crawl, HTML entities decoded twice so
    that text could become a tag, a spreadsheet cell able to break the table it was rendered into.
  • Zero known vulnerabilities, including a high-severity denial of service in a build
    dependency.

Internal

  • Node 20 reached end of life in April; everything moved to Node 22, which also unblocked eleven
    major dependency upgrades that had been stuck behind it — Express 5, React 19, TypeScript 7.
  • Two failures that had been hiding themselves: a pull request with a conflict reported nothing
    rather than "conflict" (every check silently skipped), and a release step that silently
    published nothing. Both are loud now.

🔒 Verify your download (SHA-256)

The one-paste installers verify this automatically. To check by hand, compute the hash and match:

  • macOS/Linux: shasum -a 256 <file>
  • Windows (PowerShell): Get-FileHash <file> -Algorithm SHA256
a45320252471dda8dd604325bc2a3a6d56ef6e919631d8932ed8f8ee6af07dad  SAM-3.2.1-arm64.dmg
3f85693e5bef563ba1cd42aeae99c5b0f00f503754998e55c813925b94ffb650  SAM-3.2.1.AppImage
8e9a1be59cbfc316cdfcbd61b0553241c15be6afc7811c3ad4ed2d0a22f234d4  SAM-3.2.1.dmg
d4d16462461d281d7a0d6e60227a5b869c12c3dede4a703ef4e2d33af097bc3d  SAM-Setup-3.2.1.exe
222c020455336b2407b6bf0fe1da3d3312a8d8250bb72831cd3447cedfd3065e  sam_3.2.1_amd64.deb