Skip to content

fix(annotate): add /api/save-notes POST endpoint to annotate server#884

Open
titosemi wants to merge 2 commits into
backnotprop:mainfrom
titosemi:fix/annotate-server-save-notes
Open

fix(annotate): add /api/save-notes POST endpoint to annotate server#884
titosemi wants to merge 2 commits into
backnotprop:mainfrom
titosemi:fix/annotate-server-save-notes

Conversation

@titosemi

Copy link
Copy Markdown

Fixes #844

Problem

Saving annotations to Obsidian (Save to Obsidian button) fails silently in annotation mode. The button is visible and clickable but nothing happens because the annotate server lacks the /api/save-notes POST route.

The plan review server has this route and works correctly — only the annotate server was missing it.

Root Cause

packages/server/annotate.ts (Bun source) and apps/pi-extension/server/serverAnnotate.ts (Pi extension copy) did not implement the /api/save-notes handler. When the frontend sends the save request in annotation mode, the server falls through to the HTML catch-all route, returning the SPA HTML instead of JSON.

Changes

  • packages/server/annotate.ts — Added /api/save-notes POST route handler with the same integration logic as serverPlan.ts: accepts obsidian, bear, and octarine configs, runs configured saves in parallel, returns { ok: true, results }.
  • apps/pi-extension/server/serverAnnotate.ts — Same route added to the Pi extension copy of the annotate server.
  • packages/server/integrations.test.ts — Added saveToObsidian unit tests (success and missing vault cases). Consolidated duplicate imports from ./integrations into a single statement.
  • packages/server/annotate.test.ts — HTTP endpoint tests for the new route (success, empty integrations, integration-level error).

Testing

bun test packages/server/annotate.test.ts
  ✓ POST saves to Obsidian vault and returns success
  ✓ POST returns 200 with empty results when no integrations
  ✓ POST with missing vault returns integration error, not server error

bun test packages/server/integrations.test.ts
  ✓ saveToObsidian writes plan file to temp vault
  ✓ saveToObsidian fails when vault path does not exist

bun test tests/parity/route-parity.test.ts
  ✓ All Bun ↔ Pi routes match (including save-notes)

All 205 server tests pass, 0 fail.

titosemi added 2 commits June 10, 2026 20:55
Copies the save-notes route from the plan review server into the
annotate server (Bun source and Pi extension copy), enabling Save to
Obsidian in annotation mode.

Fixes backnotprop#844
Verifies saveToObsidian writes files correctly and handles missing
vaults. HTTP endpoint tests cover success, empty integrations, and
integration-level error (not 500).

Imports consolidation from ./integrations into a single statement.
@backnotprop

Copy link
Copy Markdown
Owner

thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: Failed to Save to Obsidian

2 participants