Compiled entirely from public activity on meta.discourse.org, X, and GitHub.
💬 meta.discourse.org
Sam’s activity this week centered on AI decision-model access and bot tooling: he clarified that CDCK-hosted customers get preconfigured model access, pointed self-hosters toward a way to try it, and demonstrated his Meta bot in a discussion about admin bot management. He also reviewed and endorsed fixes for automatic group flair and time tracking on deleted topics or posts, while noting some awkwardness in the flair API.
🐦 On social
Agent-assisted development and term-llm dominated the week, highlighted by an agent adding Windows support, a new context-usage control, and plans for an agent-activity header. A recurring theme was restraint: less UI “word vomit,” more compact, inspectable controls, and fewer elaborate code mountains from agents. Replies were hands-on and persistent, following up on image 2.6 availability in Codex with API probes and source inspection, alongside discussions of long-lived agent memory and upstreaming fixes.
- 16 posts and 15 replies captured in the last 7 days
- Top by engagement: since @thsottiaux gave us all 2 resets, I might as wel…, Benchmarking mini_sql on Spinel by @yukihiro_matz, loo…, Buying my agent a computer is paying off big time, it…
Most engaged tweets:
- post — since @thsottiaux gave us all 2 resets, I might as well try to port Discourse to Spinel, @yukihiro_matz working on upstreaming the fixes … Discourse is a very tough target — 4 likes · 1 reposts · 1 replies · 2577 views
- post — Benchmarking mini_sql on Spinel by @yukihiro_matz, looks like to get maximum perf we will need a native bridge: — 4 likes · 2 reposts · 0 replies · 2539 views
- post — Buying my agent a computer is paying off big time, it runs mac in a container, it runs windows in a container and now it added windows support for term-llm — 4 likes · 0 reposts · 3 replies · 470 views
- reply to @nateberkopec — you are missing out not using a web frontend … big time. — 0 likes · 0 reposts · 1 replies · 2227 views
- reply to @reach_vb — any plans to land image 2.6 on codex plans? I probed and looked at codex source and it does not appear to be working now — 3 likes · 0 reposts · 1 replies · 1414 views
🛠️ GitHub — Sam’s Commits
samsaffron/term-llm
Over the last seven days, Sam focused on making term-llm easier to navigate and understand, adding project breadcrumbs, a context-usage meter, clearer reasoning displays, and completion alerts that identify the relevant chat. He also introduced multi-user attribution so shared sessions can track participants without passing identity metadata to the model. Alongside those improvements, he deferred loading commit/review workflows until needed, modernized frontend tooling and dependencies, and tightened reliability and macOS distribution through targeted fixes and release signing.
Key commits:
fe3cdc8— sign mac releasesdb1ab5e— chore(deps): update Pagefind and SQLiteaf55d85— test(serve): wait for reverse cancel cleanup5306319— fix(frontend): fit ordered list markers in messages64c6061— chore(frontend): replace ESLint with Oxlint
discourse/discourse
Over the last seven days, Sam focused on making Discourse’s bots more useful and account workflows safer. He added administrator controls for bot discoverability in chat, with plugin extension hooks, and removed the AI subagent five-call restriction while retaining shared resource budgets and a reserved final response. He also hardened authentication and user management by rejecting malformed passwords, preserving invite login errors without consuming invites or login codes, and blocking users from being merged into themselves, backed by regression tests.
Key commits:
3158c75— FIX: Validate passwords and preserve invite login errors (#45540)bcd75aa— FEATURE: Add chat bot discovery controls (#45538)9c38b95— FIX: prevent merging a user into themselves (#45531)e602396— FIX: remove subagent call limit (#45449)
🤖 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 more portable and easier to operate, adding native Windows support alongside machine-readable service status and independent lifecycle controls. The work also improved conversation activity and job visibility, refined the mobile/sidebar experience, and made Hub connections more resilient to bursts of browser requests. Security and privacy fixes tightened widget cookie-write origin checks and excluded developer messages from transcript exports, while documentation corrections clarified installation, deployment, and everyday usage.
Key commits:
7c876c2— Add native Windows support (#1333)9592cf2— docs: Remove the nonexistent Ctrl+F attachment shortcut from the usage guide (#1336)a7027f8— feat(service): add JSON status and independent lifecycle controls (#1331)5b7739e— Ghost the mobile sidebar button so it stops crowding the title (#1328)80e7db1— Add native conversation activity and scoped job details (#1327)
sam-saffron-jarvis/discourse-spinel
Over the last seven days, Jarvis, acting under Sam’s direction, built out an experimental native Discourse reader using Spinel, connecting anonymous latest/topic data to the real Ember frontend and adding read-only reactions, stored-content details, and SQL profiling. The work then shifted toward executing original Discourse source rather than adapted implementations, developing Rails compatibility and narrowly scoped parity and security checks. Audited source snapshots and porting documentation made that progress inspectable while explicitly distinguishing the working adapted demo from the still-incomplete original-source native port.
Key commits:
a56d486— Publish current original-source fidelity WIP snapshota776ff9— Publish audited source-browsing checkpoint and porting guidefbc2d20— Add source-grounded stored-cooked details reader and native/browser proofc971dcd— Extract source read-only reactions counter and users menu3cd0701— Extract anonymous per-post reactions summary from source
⤴️ GitHub — Pull Requests
14 PRs this week:
- ✅ discourse/discourse#45547 (diff) — FIX: Retry AI spam scans without a valid boolean verdict merged
Require an explicit boolean spam verdict. Invalid LLM output and decision-only refusals fail the scan for retry instead of being recorded as not spam. Preserve LLM fallback for decision-model refusals and return a localized 422 error from the admin…
- ✅ discourse/discourse#45548 (diff) — FIX: Normalize and validate sentiment classification payloads closed
Accept flat prediction lists and single-input batch wrappers, normalizing both to the existing label-to-score result. Reject empty, malformed, and multi-input payloads rather than persisting ambiguous classifications. - Passed: bin/rspec…
- ✅ discourse/discourse#45542 (diff) — FIX: Ignore topic metadata when loading historical post bodies merged
Only replay attributes belonging to the post when loading a historical version. Topic metadata such as category and tags must not be assigned as post attributes; rendering a historical body must not persist changes to the post or topic. - Passed…
- ✅ discourse/discourse#45540 (diff) — FIX: Validate passwords and preserve invite login errors merged
Reject non-string JSON passwords before password authentication. Preserve login errors for existing invitees, including suspended accounts and blocked IPs, without consuming the invite or login code. - Passed: bin/rspec…
- ✅ SamSaffron/term-llm#1320 (diff) — chore(deps): bump preact from 11.1.0 to 11.1.1 in /frontend in the npm-minor-pat closed
Bumps the npm-minor-patch group with 1 update in the /frontend directory: preact. Updates preact from 11.1.0 to 11.1.1 Dependabot will resolve any conflicts with this PR as long as you don’t alter it yourself. You can also trigger a rebase manually…
- ✅ matz/spinel#10940 (diff) — perf(reflection): skip absent boxed method lookups opened
Use core method inventories to identify boxed value tags that cannot respond to a literal method name, avoiding unnecessary runtime lookups. Keep runtime checks for dynamic names, user overrides, and classes with reopened methods; cover those cases…
- 🟢 discourse/discourse#45546 (diff) — FIX: Reject chat threads with missing original messages opened
Treat threads whose original message is physically missing as not found in thread lookup and message listing, including for moderators. Retain the existing distinction for soft-deleted messages and moderator access. - Passed: bin/rspec…
- 🟢 discourse/discourse#45545 (diff) — FIX: Index malformed mailto links as search text opened
Treat URI component errors like other invalid URI errors during search tokenization. Malformed mailto links should be indexed as text without aborting indexing or dropping multilingual content. - Passed: bin/rspec spec/lib/searchspec.rb…
- 🟢 discourse/discourse#45544 (diff) — FIX: Preserve all code segments in Markdown endpoint code blocks opened
Convert each preformatted block once and preserve the text of all of its code segments. Keep the first code segment’s language and choose a fence longer than any backtick run in the complete block. - Passed: bin/rspec…
- 🟢 discourse/discourse#45543 (diff) — FIX: Skip missing recipients when publishing unread PM state opened
Skip stale topic-user records whose user no longer exists, so unread private-message state continues to be published to the remaining recipients. - Passed: bin/rspec spec/models/privatemessagetopictrackingstatespec.rb (included in the full…
- 🟢 discourse/discourse#45541 (diff) — FIX: Return JSON errors for unusable and rate-limited invites opened
Return a private JSON 404 response for missing, expired, and redeemed invites. Let JSON rate-limit errors use the standard 429 response and retry metadata while preserving the HTML error page. - Passed: bin/rspec…
- ✅ discourse/discourse#45538 (diff) — FEATURE: Add chat bot discovery controls merged
Let admins opt bots into chat discovery and update that setting for existing bots. Add plugin hooks for extending bot creation fields and handling their values.
- ✅ matz/spinel#10922 (diff) — Hash#delete probes a String-keyed mixed-value hash once opened
Return the removed value from the same lookup that deletes its entry, instead of hashing and probing the key through haskey, get, and delete. Cover collisions, reinsertion, defaults, frozen hashes, and removed-object lifetime, and add a…
- ✅ discourse/discourse#45531 (diff) — FIX: prevent merging a user into themselves merged
Reject self-merges in guardian checks and in UserMerger before any data changes. Add coverage for same-instance and separately loaded self-merge attempts.
🐛 GitHub — Issues
No issue activity this week.
👀 GitHub — Reviews
No reviews this week.