Compiled entirely from public activity on meta.discourse.org, X, and GitHub.
💬 meta.discourse.org
Sam’s week focused on fixing bugs and smoothing out transitions: he shared fixes for ad-plugin issues, pointed to an upcoming repair for SES/SNS bounce handling after security hardening, and proposed rejecting malformed tags that could crash review-queue approvals. He also helped troubleshoot migrating existing AI-agent conversations to new bot users, responded to concerns about unwanted bots, and joined a lighter exchange over a Halloween theme’s “spoopy” name.
🐦 On social
AI tooling and practical agent engineering dominated, with posts on smart search reranking in term-llm, Discourse’s chat-first communities, and system-test performance improvements. The quip that agent harnesses are easy except for the edge cases drew the most replies among the supplied posts, with follow-up discussion stressing the long-term work behind Jarvis and the limits of today’s models. Replies were hands-on and candid, covering systematic codebase scanning at Discourse, DeepSeek finding issues another model missed, and the frustrations of macOS signing and notarization.
- 17 posts and 14 replies captured in the last 7 days
- Top by engagement: Writing a agent harness is easy except for the 98737 e…, I am about to learn how much 7% of a $200 dollar Codex…, At last I figured out how to navigate Apple’s develope…
Most engaged tweets:
- post — Writing a agent harness is easy except for the 98737 edge cases. — 5 likes · 1 reposts · 5 replies · 1126 views
- post — I am about to learn how much 7% of a $200 dollar Codex plan gets me in Luna High tokens… I bet this is close to infinity. — 4 likes · 0 reposts · 3 replies · 737 views
- post — At last I figured out how to navigate Apple’s developer site. hyprland computer use is working nicely. — 8 likes · 0 reposts · 1 replies · 886 views
- post — No, this is wrong, there is no magic voodoo “feels” in AI harnesses, we all do the same things, tools, system prompts, skills, etc… — 3 likes · 0 reposts · 2 replies · 1089 views
- reply to @nateberkopec — At @discourse we started systematic full codebase scanning about once a week and have a dashboard that is always showing us the top issues with candidate patches that pass CI. An… — 3 likes · 1 reposts · 2 replies · 455 views
🛠️ GitHub — Sam’s Commits
samsaffron/term-llm
Over the last seven days, Sam Saffron focused on making term-llm’s long-running, multi-client workflows more dependable: guaranteeing subagent result delivery, preserving transcript recovery across session switches, keeping compaction alive through browser disconnects, and maintaining local service during Hub outages. He also improved the web and mobile experience with native app push notifications, session inspection, resizable panels, image copying, and more responsive dashboard updates. Supporting work broadened provider discovery and benchmarking while strengthening test isolation, package documentation, and browser CI coverage.
Key commits:
120f5da— feat(hub): add long-poll dashboard change feed4ab97a5— feat(serve): support explicit session status IDsa614d69— fix(frontend): allow steering during compaction095fa9b— fix(serve): keep nodes available during Hub outages2496b5f— fix(chat): guard transcript revisions across session switches
discourse/discourse
Over the last seven days, Sam focused on reliability and defensive fixes, particularly in Discourse AI: keeping prompts within model context limits, handling malformed fetched text, preserving conversation snapshots, and helping bots recover from tool errors. He also tightened AI bot provisioning so user accounts are created only when the relevant features are enabled. Elsewhere, he improved email delivery and bounce tracking, fixed house-ad category selection, strengthened validation for queued-post tags, and prevented obsolete reminder timers from being scheduled, with regression tests accompanying the fixes.
Key commits:
def5934— FIX: Match SES bounces by original message ID (#44995)faab522— FIX: Handle house ad category selection (#44992)27b3393— FIX: Reject scalar tags in queued posts (#44990)971fc4e— FIX: Decode binary text responses as UTF-8 (#44880)a555a0b— FIX: Fit serialized prompts to model context (#44879)
discourse/dv
Over the last seven days, Sam Saffron focused on making Discourse AI setup more automatable through dv, adding support for creating, testing, and updating AI decision models from non-interactive JSON configuration. The work covered credential handling and model references in site settings, alongside tests and documentation to make the configuration workflow reliable and repeatable.
Key commits:
09ed621— feat(config): configure AI decision models
rubyjs/mini_racer
Over the last seven days, Sam Saffron focused on making mini_racer’s Ruby–V8 boundary safer: turning serialization, callback, and snapshot failures into recoverable errors rather than process crashes or hung contexts. He added extensive regression coverage and prepared the 0.22.2 release around those reliability fixes. He also improved everyday correctness by preserving multiline JavaScript error messages, converting Ruby dates properly, and preventing Context#load from invoking getters while serializing an unwanted return value, with corresponding TruffleRuby updates.
Key commits:
c30b42d— fix: preserve errors and safely convert valuesd8c91a2— New release time206fbda— fix: harden snapshot and callback handling904aa6b— fix: preserve nested serialization errors
SamSaffron/dotfiles
Over the last seven days, Sam focused on desktop usability, adding a persistent keep-awake toggle to the Hyprland control center with a panel indicator and documented behavior, while making the usage popup scrollable on shorter screens. He also gave Neovim’s plugin-update triage more turns to complete its work and added a test assertion to guard that limit.
Key commits:
c3b0fa7— feat(hypr): add persistent keep-awake toggle
🤖 Jarvis — Public Repo Work
Agent-authored public commits, typically guided by Sam during implementation work.
SamSaffron/term-llm
Over the last seven days, Jarvis, acting under Sam’s direction, focused on making term-llm easier to maintain: splitting the LLM and command layers into clearer packages, centralizing provider and tool definitions, and adding generated API types, reference docs, and targeted checks. Reliability work strengthened long-running conversations and distributed operation, covering Claude Code compaction and restart recovery, transcript preservation, failed-subagent resumption, Hub failure isolation, and safer attachment uploads. Sam-directed agent work also improved grep’s relevance and output, tightened notification and background-input ownership, and laid groundwork for browser-based demos through WebAssembly-compatible packages and a static scripted UI.
Key commits:
1291e4f— Fix background input handling and web continuation ownership (#1285)b8dfeab— fix: recover overflowed claude-bin sessions; store owns active-context replacement (#1281)56f705d— fix(claude-bin): compaction and resume after restart (#1279)411f628— Upload attachments separately and bound uncertain sends (#1280)38e36c2— feat(claude-bin): run /compact natively in the resumed Claude Code session (#1278)
⤴️ GitHub — Pull Requests
4 PRs this week:
- ✅ discourse/discourse#44995 (diff) — FIX: Match SES bounces by original message ID merged
Use the original Message-ID from SES headers to find the corresponding email log, rather than the SES-assigned ID. Document the SNS setup requirements and cover header fallbacks and mismatched IDs.
- ✅ discourse/discourse#44990 (diff) — FIX: Reject scalar tags in queued posts merged
Validate tag parameters before queuing and again when approving queued posts, preventing malformed scalar values from bypassing input checks. Keep blank tag values valid for topic creation.
- ✅ discourse/discourse#44992 (diff) — FIX: Handle house ad category selection merged
Use the shared category selector with resolved category records so admins can find and save categories when lazy loading is enabled. Exclude routes from house ad attributes and sync them separately during creation.
- ✅ SamSaffron/term-llm#1273 (diff) — feat(web): make the sessions sidebar resizable closed
The changes panel can be resized by dragging its edge, but the sessions sidebar is fixed at 280px. This adds a matching handle on the sidebar’s right edge. - Drag it, use the arrow keys (Home and End jump to the minimum and maximum), or double-click…
🐛 GitHub — Issues
11 issues this week:
- rubyjs/mini_racer#262 —
MiniRacer::RuntimeErrordoes not handle multiline error messages correctly closed - rubyjs/mini_racer#197 — Object property defined with Object.defineProperty gets immediately evaluated closed
- rubyjs/mini_racer#136 — Marshalling nested rb
Dateto jsDateis not working. closed - rubyjs/mini_racer#224 — context.call: does not support non-global function names closed
- rubyjs/mini_racer#225 — context: allow attached external functions to access JS environment closed
- rubyjs/mini_racer#121 — Marshalling nested JS
Dateto rbTimenot working closed - rubyjs/mini_racer#358 — Wrong linker path when building from source closed
- rubyjs/mini_racer#450 — Snapshot#warmup! aborts when the warmup code creates an Intl object (CheckGlobal closed
- rubyjs/mini_racer#449 — Snapshot.load("").warmup! aborts the process (Check failed: !artifacts) closed
- rubyjs/mini_racer#448 — Snapshot.load accepts a blob from another V8 version, and Context.new then kills closed
- rubyjs/mini_racer#447 — Returning a value with a nested Symbol aborts the process (Assertion try_catch.H closed
👀 GitHub — Reviews
3 reviews this week:
- discourse/discourse#44996 — PERF: Avoid internal Chromium pages during browser tests approved
- discourse/discourse#44988 — PERF: Speed up system tests with eager source positions approved
- discourse/discourse#44884 — DEV: Add appeal instructions to moderation notices when DSA is enabled approved