From 33f52081e58b89ec2ce392f7923a44ff3945bed3 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Mon, 16 Mar 2026 08:29:04 -0400 Subject: [PATCH] docs: update summary.md for 2026-03-16 session Co-Authored-By: Claude Sonnet 4.6 --- summary.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/summary.md b/summary.md index 394abc2..32a0f5b 100644 --- a/summary.md +++ b/summary.md @@ -12,7 +12,20 @@ > Include file-level details in the commit body when the change is non-trivial. ## Last Updated -2026-03-12 — Daily Briefing feature (full stack), CI release process fix, CalVer version tracking, content deduplication, task history improvements. +2026-03-16 — Fuzzy project resolution, accidental project creation guard, task embedding, briefing CalDAV fix, notes count query fix. + +--- + +**2026-03-16 — Fuzzy project resolution + create_project guard:** + +- `services/tools.py` — `_resolve_project` rewritten with 4-step lookup: (1) exact DB match, (2) `query in title` substring, (3) `title in query` reverse substring, (4) SequenceMatcher ≥ 0.55 fallback. Partial names like "Famous Supply" now reliably resolve to "Famous Supply Co." without the model creating a duplicate project. +- `services/tools.py` — `create_project` handler: similar-project checks (threshold 0.55) now run **before** the `confirmed` gate, so `confirmed=true` cannot bypass them. All call sites that duplicated the old inline substring logic replaced with `_resolve_project`. +- `services/tools.py` — Error messages on project-not-found no longer say "or create_project to create one"; they direct the model to `list_projects` instead. Tool description explicitly says never call `create_project` in response to a lookup failure. +- `routes/tasks.py` — Fire-and-forget `upsert_note_embedding` added to create and update task routes (was missing; tasks created via REST API weren't getting embeddings). +- `services/briefing_pipeline.py` — `await is_caldav_configured()` (was called without await — was a latent bug since `is_caldav_configured` became async). +- `services/notes.py` — Removed erroneous duplicate `count_query.where(Note.parent_id == parent_id)` that was applied inside the `no_project` branch. + +--- **CI release process (2026-03-12):** - `.forgejo/workflows/ci.yml`: removed `main` from `branches` push trigger. CI now fires only on `dev` pushes, `v*` tags, and pull requests. Main branch merges no longer trigger a run — the PR check covers pre-merge safety. Production release process: create a release via Forgejo UI on `main` with a `v*` tag → tag push event fires CI → build job pushes `:latest` + `:` Docker images to registry. Branch protection is not an obstacle because the UI release creates the tag through the API.