← All docs changelog/2026-04-08.md

Apr 8, 2026

6 commits | Theme: Streaming chat, project sync, iOS stability

Changes

New Features

Streaming Chat Endpoint (c826279)

  • New /ml/chat/stream SSE endpoint in dev/ml/gateway/chat.py
  • Multiplexes responses from Gemini API and on-prem Ollama (via model proxy)
  • Each SSE event tagged with {"provider": "gemini", "delta": "...", "done": false}
  • Clients can demux and render multiple provider responses in parallel
  • Added Bruno tests for the chat API

Project Sync Endpoint (7d21cde)

  • New POST /v1/sync-project on the data service
  • Fetches full project tree (tasks, subtasks, items, specialties) from Supabase
  • Generates markdown with YAML frontmatter following LocationModels convention
  • Saves as projects/{slug}.md asset in location SQLite DB + S3 blob
  • Backend list_assets now supports projectId="all" for cross-project discovery
  • Extracted shared modules: core/supabase_queries.py, core/markdown_gen.py, core/location.py
  • Refactored ML scraper to use shared query functions

Planning Context in Sync (4002ee3)

  • Project markdown now includes a "Planning Context" section
  • Embeds Gemini-generated clarifying questions and user answers from ai_metadata
  • Gives on-site agents full visibility into the refinement conversation

Bug Fixes

Deduplicate list_assets (f35c4c1)

  • When projectId="all", uses SQL window function to return only the most recent asset per unique file_name
  • Prevents iOS DataSyncService from downloading duplicate copies (e.g., manifest.md appearing 3x under different project IDs)
  • Fixes memory exhaustion and app crashes on iOS

Bruno Test Cleanup (1d154c4)

  • Chunked upload test now completes full flow: init -> upload chunk (final=true) -> verify -> delete
  • Data Bridge test deletes test-photo.jpg after download
  • Reduced chunked test from 10MB to 1KB (1 chunk) for speed
  • Eliminates orphaned assets that caused 500 errors on missing S3 blobs

Testing

Bruno Environments (34ecddb)

  • All environments (dev, beta, jh, main, cc, fl, rk) now use the same real Supabase test IDs
  • Tests are reproducible across all environments