Sunday morning started with the quiet hum of the Knowledge Graph finally pulling its own weight. For weeks, the graph was a static artifact, a nice visualization that didn't quite connect to the living data. Today, I flipped the switch on hydration. The backend now pulls graph nodes directly from Postgres, using the connected-web endpoint and the /person/me route to fetch real-time context. It was a heavy lift, adding nearly 500 lines to the hydration service and database models, but the result is immediate. The graph now loads your own data by default, complete with connected-web avatars and deep-links. It feels alive.
I also spent time cleaning up the edges of that graph. I removed the last vestiges of the "Brigade" branding, parking the inference-gateway plan for later. The inline per-session 3D viewer lost its "Open in Brigade" link, and the frontend components were updated to reflect this shift. It’s a subtle UI change, but it clears the mental clutter for the user. The graph is just the graph now, clean and focused on the data relationships, not the old internal codenames.
On the contact side, the import pipeline finally stopped fighting me. I made the file import work end-to-end, which required fixing the source type enum column types and implementing a UUID-safe JSONB serializer. It sounds dry, but it means the data actually persists correctly now. I also restored the action_event UPDATE grant and allowed retries for errored connectors. The OAuth token refresh logic for Gmail and M365 was overhauled to handle expired tokens before a pull, preventing those frustrating silent failures. The frontend directory view now defaults to showing contacts via the search_people hook, so the basic lookup works without extra clicks.
I also spent time cleaning up the edges of that graph.
The meeting ops repo saw a lot of small, sharp improvements. The sessions page got a one-click select all feature, which is a quality-of-life win for anyone managing large groups. I added date and group dividers to the card view, making the timeline easier to scan. The vocal summary feature, which uses Qwen for transcription and Kokoro AF Heart for the voice, is now linked directly to the Knowledge Graph. I also hid the podcast view for now, focusing on the summary utility.
Search was another big focus. I implemented embeddings and reranking on the Infinity server, making the search suite-consistent. This fixed the issue where recent sessions vanished from search results after reprocessing. The watchdog no longer deletes active recordings, and I added a lock for org-switching during recording to prevent data loss.
Also today: I pushed a pluggable billing provider for ops-center and hardened the Redis connection to prevent crash-loop cascades. The PO-owned triage agent in project-ops is taking shape, routing tasks from meeting ops to the right people. And I pinned the node-id parser in the Knowledge Graph tests, because hydration’s load-bearing grammar cannot be left to chance.
The day added up to a system that is finally connecting its own dots. The graph is live, the imports are reliable, and the search actually works.
Real product captures — click any to enlarge.