Release diary, 2026-04-28
What 24 hours of an open source AI project actually looks like, from inside the repo
Most guides on this topic give you a list of 30 to 50 repositories and a sentence each. That is fine for a feed. It is the wrong shape for the question of what shipping in 24 hours actually feels like. So this page does the inverse. One open source AI project. One day. Every commit named, every line number cited, every cascade explained. The project is Fazm because that is the repo I have on disk; the shape of the day is generic, and you can run the same exercise on llama.cpp, ollama, vllm, or any other repo with git log --since='1 day ago'.
“Open source AI in the last 24 hours, in one project”
Fazm v2.6.2, github.com/mediar-ai/fazm
The 24 hours, in shape
The previous tag was v2.5.0, cut on 2026-04-27. The next tag was v2.6.2, cut on 2026-04-28. Between them, 42 commits landed on the main branch in roughly five hours of concentrated work, from 1c329ac3 at 13:14 PT to 5e5ec1a2 at 18:30 PT. Reading the log in order, the day decomposed into four phases.
- 1
Crash hunt
14 commits on FAZM-20, one global patch and 13 per-window applications
- 2
Session amnesia
9 commits adding sessionExpired plumbing and prior-context fallback to the ACP bridge
- 3
Voice and self-knowledge
10 commits on transcription vocabulary, settings UI, and the floating-bar capability prompt
- 4
Cleanup and tag
9 commits on pop-out workspace, changelog rollups, removal of dead settings rows, v2.6.2
None of this is unusual for an open source AI project on a real release day. The shape is what is interesting: most of the day is one bug, fragmented into many tiny commits, because the bug is structural and each window in the app has its own constructor that needs the same line of code. That is the part roundup pages cannot show you.
The FAZM-20 cascade, the most instructive piece of the day
The crash that took 14 commits to put down is a flavour of bug that shows up often in macOS apps with many windows. Stack traces all pointed at EXC_BAD_ACCESS inside NSConcreteMapTable dealloc on the NSTouchBarFinder update path, even though Fazm has no Touch Bar code. The likely culprit is an AppKit weak-reference bug under heavy floating-bar and pop-out window churn. Disabling automatic Touch Bar wiring and window tabbing makes the symptom go away.
The first attempt was a single global hook at app startup. It was not enough. The reason is in the next two snippets.
One global call did not cover every window
A single call inside AppDelegate.applicationDidFinishLaunching, intended to disable AppKit's automatic Touch Bar and window tabbing for the whole process. Worked for windows constructed after this line ran. Did not cover windows constructed inside their own private initializers, modal panels, or NSPanel subclasses with custom window paths.
- FazmApp.swift line 168, NSWindow.applyAppGlobalCrashWorkarounds()
- Caught: every standard NSWindow created after launch
- Missed: paywall window, onboarding tutorial, toast, silence overlay, analysis overlay, session recording permission, paywall, app management setup, browser extension setup, Claude auth window, post-onboarding tutorial, feedback window, pop-out workspace window
Reading the diff is more useful than reading the bullet list. The root patch lives next to the existing power-management bootstrap in AppDelegate. Each per-window patch lives one line below the window's own init or makeKeyAndOrderFront call.
The actual diffs that landed
// Desktop/Sources/FazmApp.swift, line 164 to 168
// FAZM-20 mitigation: disable AppKit auto touch bar + window tabbing globally.
// Crash signature is EXC_BAD_ACCESS in NSConcreteMapTable dealloc inside the
// NSTouchBarFinder update path. Fazm has no TouchBar code; the heavy
// floating-bar/popout window churn is hitting an AppKit weak-ref bug.
NSWindow.applyAppGlobalCrashWorkarounds()The other twenty-eight commits, briefly
A release day is never one thing. The non-FAZM-20 work clustered around three threads.
Session amnesia (9 commits)
When the upstream chat session expired mid-conversation, follow-up messages reached the bridge but had lost their prior context. The fix introduced a sessionExpired event on the ACP bridge, a priorContext field on QueryMessage, and a context-recovery path that reads the last N turns from the local SQLite history when the upstream session is gone. The UI side gained an inline notice that says "your previous chat was restored from local history" instead of a blank stare.
Voice transcription accuracy (10 commits)
Deepgram Nova-3 was treating product names as ordinary English. So the day's vocabulary commit added a fixed set of domain terms to bias transcription. The interesting part is that this is exactly the kind of change an aggregator page cannot show you. It is one method, one diff, six new lines of meaningful payload, and the downstream effect is that dictating "ask Claude with MCP and ACP" stops being transcribed as "ask cloud with MCP and AKP."
Vocabulary diff in DeletedTypeStubs.swift
// Desktop/Sources/DeletedTypeStubs.swift, line 612 to 615 (before)
var effectiveVocabulary: [String] {
var vocab = Set(transcriptionVocabulary)
vocab.insert("Fazm")
return Array(vocab)
}Three more commits then added a Vocabulary section to Settings, an observer to re-render the dictionary section when terms change, and a way to toggle individual terms off if Deepgram's bias is fighting your actual speech. Scope creep on a one-line fix is normal. Every project has it.
Self-knowledge for the floating bar (4 commits)
The agent kept being asked "what can you do," "how do I share my screen," "how do I pay," and giving generic answers. So the system prompt at Desktop/Sources/Chat/ChatPrompts.swift line 25 to 55 grew a new <fazm_capabilities> block listing what the app actually does and how to do it. Tiny change in lines, large change in user experience.
The same day, viewed as a git log
Same 24 hours, raw. This is the output of git log --since='2026-04-27' --pretty=format:"%h %s" run inside the Fazm repo, lightly trimmed for length.
Why the diary view beats the aggregator view
You can build a useful 24-hour view of open source AI on GitHub using the search URL github.com/search?q=topic%3Aartificial-intelligence+pushed%3A%3E2026-04-27&s=updated&type=repositories, which sorts by latest push and filters by an inclusive greater-than UTC date. That gets you a list. The list is fine.
The list does not, however, tell you whether a repo's 30 commits today are 30 small refactors or a 14-commit cascade against one structural bug, a vocabulary diff, two config tweaks, a changelog edit, and 12 typo fixes. Those are very different situations. One of them means "active project on a release day." Another means "maintainer is fighting one bad afternoon." A third means "they hit a tag." You only tell them apart by reading the log.
So the recommendation, after spending a day inside the log of one AI project, is unfashionable: pick three projects you actually use, add git fetch && git log --since=yesterday to a daily routine, and skim the firehose only when you are looking for something new to depend on. Volume is a lousy proxy for signal.
A pattern for reading any project's 24 hours
If you do this exercise on llama.cpp or ollama or vllm tomorrow, the shape of the work will differ but the questions are the same. Four things to look for, in order.
- Find the cascades. Filter the log for any commit message that names the same ticket ID more than three times. Read the root commit, then read one of the per-application commits. The pattern between them is what tells you whether the codebase has good seams or bad ones.
- Find the one-line, high-leverage commits. The Fazm vocabulary commit was 18 string inserts in one method. Six of those strings were AI-product names. That is the kind of change a small team ships in five minutes and a large team ships in a quarter. Pay attention.
- Find the system-prompt edits. For any AI project, the system prompt is half the product. The
fazm_capabilitiessection inChatPrompts.swiftis more telling than any feature flag. - Read the changelog rollups, not the commit messages. A maintainer's rewrite of the day into user-facing language often surfaces what they think actually mattered, which is different from what took the most commits.
Want a release diary like this for your own AI project?
Fazm runs locally on your Mac, reads your repo through accessibility APIs, and can produce a daily commit summary into a local SQLite table. 30 minutes to walk you through setup.
Questions readers ask about this kind of release diary
What does '42 commits in 24 hours' on Fazm actually contain, by category?
Counted by hand from the 2026-04-28 git log between 13:14 PT and 18:30 PT: 14 commits on one ticket (FAZM-20, the AppKit Touch Bar crash, one root patch in FazmApp.swift line 168 plus 13 per-window applications), 9 commits on the chat session resume path (sessionExpired event in ACPBridge, priorContext on QueryMessage, context recovery from local history, paywall-blocked state, error suffix race), 6 commits on voice transcription (domain vocabulary insert in DeletedTypeStubs.swift line 615, vocabulary management UI, observer wiring, Screenpipe and OMI removal from settings), 4 commits on the floating-bar capability prompt (fazm_capabilities section in ChatPrompts.swift line 25 to line 55), 3 commits on pop-out workspace inheritance, and the rest on changelog rollups for v2.6.2.
Why did one bug fix take 14 commits instead of one?
AppKit window tabbing and automatic Touch Bar wiring are class-level defaults that fire on every NSWindow at construction time. Fazm has zero Touch Bar code, but the crash signature is EXC_BAD_ACCESS in NSConcreteMapTable dealloc inside the NSTouchBarFinder update path. The first attempt was the global hook at FazmApp.swift line 168: NSWindow.applyAppGlobalCrashWorkarounds(). That kills tabbing for windows the app creates after launch. It does not kill it for windows constructed inside private initializers, modal panels created at first-launch onboarding, or NSPanel subclasses that bypass the standard NSWindow path. So each individual window subclass (paywall, AppManagementSetup, BrowserExtensionSetup, FeedbackView, SilenceOverlayWindow, AnalysisOverlayWindow, SessionRecordingPermissionWindow, the toast window, the post-onboarding tutorial window, the Claude auth window, and the pop-out workspace window) had to call window.applyCrashWorkarounds() in its own constructor. That is one commit per window, plus the root commit, plus the changelog. 14.
Where is the global Touch Bar workaround in the source?
Desktop/Sources/FazmApp.swift line 164 to line 168. The comment block reads: 'FAZM-20 mitigation: disable AppKit auto touch bar + window tabbing globally. Crash signature is EXC_BAD_ACCESS in NSConcreteMapTable dealloc inside the NSTouchBarFinder update path. Fazm has no TouchBar code; the heavy floating-bar/popout window churn is hitting an AppKit weak-ref bug.' Then the call: NSWindow.applyAppGlobalCrashWorkarounds(). The per-window applications use the instance method window.applyCrashWorkarounds() and live at AppManagementSetup.swift line 60, BrowserExtensionSetup.swift line 66, FeedbackView.swift line 55, SessionRecordingPermissionWindow.swift line 221, and several others. Each one carries the comment 'FAZM-20: disable auto touch bar / tabbing'.
What other open source AI projects shipped in the same 24-hour window on GitHub?
I can name what I personally tracked between 2026-04-27 and 2026-04-28 PT: llama.cpp shipped its usual stream of small commits, ollama tagged a patch release, vllm landed a perf change on the prefill path, smolagents merged a tool-use refactor, and the MCP server ecosystem on github.com/modelcontextprotocol pushed several new transport adapters. Volume is misleading. The right way to consume this is not to scroll through every project; it is to follow two or three you actually use and read their release notes when something tags. The query that gives you the raw firehose is github.com/search?q=topic%3Aartificial-intelligence+pushed%3A%3E2026-04-27&s=updated&type=repositories.
Why is reading one project's 24 hours more useful than scrolling a roundup?
Because roundups optimise for breadth, not for what shipping actually looks like. The thing you learn from this Fazm sprint that you will not learn from a list is the shape of a real fix. One bug becomes 14 commits. One vocabulary change becomes 18 string inserts plus a settings UI plus an observer to re-render the dictionary section. Aggregator lists hide that texture. They show repo names and stars. If you are evaluating an open source AI project to depend on, the texture is what you want.
What about the vocabulary commit, what was the actual diff?
Desktop/Sources/DeletedTypeStubs.swift line 612 to line 635, in the AssistantSettings.effectiveVocabulary computed property. Before: vocab.insert('Fazm'). After: an array of 18 domain terms inserted into the same Set, including Claude, Sonnet, Opus, Haiku, Anthropic, MCP, ACP, Supabase, Firestore, PostHog, Sentry, Stripe, Vercel, Deepgram, Whisper, Xcode, SwiftUI, Tauri, Screenpipe, and OMI. The insert site is the same but the payload grew because Deepgram Nova-3 was misrecognising those product names in dictation. The fix in the diff is one method; the user-facing fix took three more commits to land a settings page that lets you toggle terms on and off.
Is there a tagged release on GitHub for this 24-hour window?
Yes. v2.6.2 on 2026-04-28. The CHANGELOG.json at the repo root captures the user-facing summary, and the 42 commits between 1c329ac3 (the first commit at 13:14 PT) and 5e5ec1a2 (the last commit at 18:30 PT) are what produced it. The tag was cut from the same branch that the auto-commit pipeline pushes to.
Can I run this 'last 24 hours' query for any open source AI project myself?
Yes, and I would. For one repo: git log --since='1 day ago' --oneline in a clone. For a topic: github.com/search?q=topic%3Aartificial-intelligence+pushed%3A%3E2026-04-27&s=updated&type=repositories, replace the date with yesterday's UTC date. For tagged releases only: github.com/search?q=topic%3Aartificial-intelligence+created%3A%3E2026-04-27&type=releases. The pushed: filter is inclusive greater-than and treated as UTC. The s=updated query parameter sorts by latest push instead of best-match.
Is Fazm itself open source, and does this page count as the 24-hour digest for it?
Yes to both. The repo is github.com/mediar-ai/fazm under the MIT license. This page is one project's piece of the 24-hour signal you would otherwise have to assemble yourself by clicking through commit history. The same approach works on any other open source AI project you depend on; it is just that nobody else is going to write the diary for you.
Same firehose, different angles
Related guides on open source AI on GitHub
Open source AI projects, GitHub releases tracked by a Mac agent
The same question, answered as a how-to instead of a diary. Fazm pointing at the GitHub search URL and writing the digest into a local SQLite table.
Open source AI desktop agents, April 2026
If you wanted the aggregator view of the same window, here it is.
AI news in the last 24 hours, model releases and projects
Adjacent angle: the same 24-hour question scoped to model and paper releases instead of repository commits.