← All docs changelog/2026-W15.md

Week 15 — Apr 7-13, 2026

Summary

Major feature week: streaming chat with multi-provider support, Supabase project sync to mobile, and Gemma 4 ML pipeline stubs (training/serving/mobile). Several iOS stability fixes around asset deduplication and chunked upload cleanup.

8 commits | 33 files changed | +2,017 / -135 lines


Highlights

Streaming Chat Endpoint (Apr 8)

New /ml/chat/stream SSE endpoint multiplexes responses from Gemini and on-prem Ollama into a single connection. Each event is tagged with its provider so clients can render responses in parallel.

Project Sync to Mobile (Apr 8)

POST /v1/sync-project fetches the full project tree (tasks, subtasks, items, specialties) from Supabase, generates markdown with YAML frontmatter, and saves it as a location asset. iOS app pulls via DataSyncService. Planning context (clarifying Q&A from Gemini) is now embedded in the synced markdown.

Gemma 4 Pipeline Stubs (Apr 13)

Scaffolded Phases 3-5 of the ML pipeline spec for three Gemma 4 model slots:

  • TS_Modal (31B dense, H100, full LoRA)
  • TS_mobile4B (E4B, A10G, QLoRA 4-bit)
  • TS_mobile2B (E2B, T4, QLoRA 4-bit)

New modules: model registry with version tracking, per-slot training configs, HuggingFace download + Unsloth trainer stubs, vLLM serving stubs, A/B routing stubs, GGUF quantization stubs. ML_PIPELINE_SPEC updated from Gemma 3 to Gemma 4.

iOS Stability Fixes (Apr 8)

  • Deduplicated list_assets when projectId=all using window function — prevents OOM on iOS pull sync when the same filename appears under multiple project IDs.
  • Fixed Bruno tests to clean up chunked uploads and data bridge assets, eliminating orphaned records that caused 500 errors on missing S3 blobs.

Daily Breakdown

Apr 8 (6 commits)

  • c826279 Add streaming chat endpoint with multi-provider support (Gemini + Ollama)
  • 7d21cde Add project sync endpoint — pulls Supabase project data into location markdown files
  • 4002ee3 Add planning context (clarifying Q&A) to synced project markdown
  • f35c4c1 Deduplicate list_assets when projectId=all to prevent OOM on iOS pull
  • 1d154c4 Fix Bruno tests to clean up after themselves
  • 34ecddb Update all Bruno environments with real Supabase test IDs

Apr 9 (1 commit)

  • 4b30a5d Fix nightly scraper crash — use SELECT * for tasks/subtasks/items

Apr 13 (1 commit)

  • 1b42581 Stub Gemma 4 training/serving/mobile pipeline (Phases 3-5)

New Files

File Purpose
dev/ml/gateway/chat.py Streaming chat with provider adapters
dev/data/sync.py Supabase -> markdown project sync
dev/core/supabase_queries.py Shared Supabase fetch functions
dev/core/markdown_gen.py Project-to-markdown renderer
dev/core/location.py Location resolution (extracted from users/auth.py)
dev/ml/training/model_registry.py ModelSlot enum, version tracking, S3 registry
dev/ml/training/training_config.py Per-slot LoRA/QLoRA training configs
dev/ml/training/trainer.py HF download + training stubs
dev/ml/serving/vllm_server.py vLLM inference stub
dev/ml/serving/ab_router.py A/B routing stub
dev/ml/mobile/quantize.py GGUF export + benchmark stubs

Modified Files

  • dev/core/core.py — Added mlTrainingImage, Modal Volume, HF secret
  • dev/core/__init__.py — Export new ML symbols
  • dev/ml/ml_endpoint.py — 8 new endpoints + Volume mount + GPU functions
  • dev/data/data.py — Window function deduplication for list_assets
  • dev/data/data_endpoint.py — sync-project route
  • dev/users/auth.py — Extracted location resolution to core/location.py
  • dev/ml/data_pipeline/supabase_scraper.py — Use shared query functions, fix column names
  • specs/ML_PIPELINE_SPEC.md — Gemma 4 model selection + versioning docs
  • Bruno environment files — Real Supabase test IDs across all envs
  • Bruno test files — Chunked upload cleanup, sync-project test, data bridge cleanup