Skip to content

feat: embeddings path and 0.9.0 first stable - #121

Merged
joelst merged 5 commits into
docs/backlog-1.0-gapsfrom
feat/embeddings-foundation
Sep 18, 2026
Merged

joelst merged 5 commits into
docs/backlog-1.0-gapsfrom
feat/embeddings-foundation

Conversation

@joelst

@joelst joelst commented Sep 18, 2026

Copy link
Copy Markdown
Owner

Summary

Land the post-0.7.0 waves, including the embeddings path, as 0.9.0 — the first stable channel release (skip 0.8.0). That publish is the in-app updater test from 0.7.0 evaluation. 1.0.0 is a later stable after that upgrade is proven and 0.9.0 bugfixes land.

Stacked on #120. Do not cut 1.0.0 as the first releases/latest pointer. Full RAG stays after 1.0. There is still no Flint-tested real embedding ONNX recipe — do not mark Continue's indexer verified.

Flint seam

  • Frontend pure module
  • Frontend/SDK boundary
  • Sidecar command or runtime
  • Rust/Tauri shell
  • Packaging/release
  • Documentation only

Touched: embeddings path as before, plus version bump to 0.9.0 in package.json / tauri.conf.json / Cargo.toml, CHANGELOG, and sequencing (PRODUCT_PLAN Wave 8/9, ROADMAP, ADMIN updater).

Safety and compatibility

  • Runtime owner remains: Node sidecar under the Rust supervisor.
  • New or changed command: embedTexts { model, inputs } — 37 commands total.
  • Effect and cancellation semantics: effectful, unbounded transport deadline. Same noteActivity inFlight fencing as chat.
  • Failure or uncertain-outcome behavior: missing embedding model → self-test blocked. Chat JSON/SSE normalization stays chat-only.
  • Storage, resource, or permission impact: BYOM copy into ~/.flint as today.
  • 0.7.0 impact: 0.9.0 is the first stable after 0.7.0 evaluation. Publish with channel=stable (not a prerelease) or the updater will not see it.

Validation

  • npm run verify:release -- 0.9.0 --channel=stable
  • npm run verify:markdown-links — 154 links
  • npm run verify:ipc-contracts — 37 commands (embeddings commit)
  • Focused tests after rebase onto Close in-bar 1.0 security, lifecycle, and operator gaps #120 review fixes
  • npm run verify:bundle — not needed for this versioning commit
  • git diff --check

This stacked PR will not get GitHub checks until #120 lands and the base is retargeted to main.

Handoff

  • Lane owner: sidecar / SDK (embeddings); release operator for the 0.9.0 tag.
  • Next contributor should know:
    • Merge Close in-bar 1.0 security, lifecycle, and operator gaps #120, then this PR, then tag v0.9.0 and run the Release workflow with channel=stable. Leave “Set as a pre-release” unchecked.
    • Upgrade test: a machine with 0.7.0 evaluation installed should see About → Install for 0.9.0. Rollback is the previous MSI/NSIS.
    • Do not tag 1.0.0 until that upgrade is proven.
    • Commits on this branch are unsigned (1Password op-ssh-sign failed here). Amend with --gpg-sign if required.
    • Catalog still has zero embedding models. Recorded recipe stays BACKLOG.

Gateway autoloads POST /v1/embeddings, BYOM import omits chat templates for embedding folders, and the sidecar exposes embedTexts. Full RAG stays after 1.0; this is the 1.0.1 companion path. The native scanner discovers a Name-only inference_model.json.

# Conflicts:
#	sidecar/gateway.js
#	sidecar/gateway.test.ts
@joelst
joelst force-pushed the feat/embeddings-foundation branch from 7653acc to 8ce434c Compare September 18, 2026 08:17
Skip 0.8.0. Waves 1-9, including the embeddings path, land as 0.9.0 so the in-app updater can be proven from 0.7.0 evaluation. 1.0.0 is a later stable after that upgrade and bugfixes.
@joelst joelst changed the title feat: embeddings path (1.0.1 companion) feat: embeddings path and 0.9.0 first stable Sep 18, 2026
Require a passing /v1/models envelope before Flint-verified, round-trip listed model ids, bound self-test fetches, and abort disconnect only after a stream has started. Restore the Foundry native cache after npm extract via ci:deps. Fail startup if the native tray cannot install. Debounce background stream archive writes.
…er starts

Headers-only fetch timeouts still left json/text hanging. Disconnect could pass on a request that never left the client. Fail restore when a Foundry cache exists but dest is empty. Clear the background archive save timer on unmount.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The endpoint self-test can misclassify or falsely verify models, introduces a type error, and the CI wrapper can overlook process-launch failures.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Introduces the embeddings path and prepares Flint 0.9.0 as the first stable updater release.

Changes:

  • Adds embedding BYOM import, IPC generation, gateway autoload, diagnostics, and tests.
  • Improves conversation persistence and Foundry native-cache restoration.
  • Updates versions, release workflows, changelog, and documentation.
File summaries
File Description
src/routes/+page.svelte Adds embedding diagnostics, BYOM UI, and deferred saves.
src/lib/sdk.ts Exposes embedding IPC and inspection types.
src/lib/operation-outcome.ts Classifies embedding generation as effectful.
src/lib/ipc-deadlines.ts Makes embedding IPC unbounded.
src/lib/ipc-contracts.ts Adds the embedding command contract.
src/lib/integrations.ts Updates Continue limitations.
src/lib/endpoint-self-test.ts Expands endpoint diagnostics.
src/lib/endpoint-self-test.test.ts Tests expanded diagnostics.
src-tauri/tauri.conf.json Sets version 0.9.0.
src-tauri/src/lib.rs Fails startup without the tray.
src-tauri/Cargo.toml Sets crate version 0.9.0.
src-tauri/Cargo.lock Synchronizes the crate lock version.
sidecar/gateway.test.ts Tests embedding proxy behavior.
sidecar/gateway.js Classifies embedding traffic.
sidecar/foundry-sidecar.test.ts Tests embedding command validation.
sidecar/foundry-sidecar.js Implements embedding generation and import hardening.
sidecar/byom-import.test.ts Tests embedding model detection.
sidecar/byom-import.js Supports template-free embedding imports.
sidecar/byom-import.e2e.test.ts Tests embedding import and discovery.
scripts/hydrate-foundry-native.test.js Tests native-cache restoration.
scripts/hydrate-foundry-native.cjs Restores into missing destinations.
scripts/ci-npm-ci.cjs Adds staged CI dependency installation.
RELEASE_ROADMAP.md Defines the 0.9.0 release sequence.
README.md Documents the first stable release.
package.json Sets 0.9.0 and adds ci:deps.
docs/USER_GUIDE.md Documents embedding imports and autoload.
docs/PRODUCT_PLAN.md Adds the embeddings wave.
docs/DEVELOPMENT.md Updates CI and release commands.
docs/BACKLOG.md Refocuses remaining embedding work.
docs/ADMIN.md Adds embedding operations guidance.
CHANGELOG.md Adds 0.9.0 release notes.
.github/workflows/version.yml Uses staged CI dependency installation.
.github/workflows/release.yml Uses staged CI dependency installation.
.github/workflows/ci.yml Uses staged CI dependency installation.
.github/copilot-instructions.md Records embedding invariants.
.changeset/embeddings-foundation.md Records the stable-release change.
Review details
  • Files reviewed: 35/36 changed files
  • Comments generated: 8
  • Review effort level: Balanced

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread scripts/ci-npm-ci.cjs Outdated
Comment thread src/lib/endpoint-self-test.ts Outdated
Comment thread sidecar/gateway.js Outdated
Comment thread src/lib/endpoint-self-test.ts Outdated
Comment on lines +245 to +249
const chatIds = ids.filter(isChatModelId);
const embedIds = ids.filter(isEmbeddingModelId);
// The check is "a returned ID round-trips into chat". Never send an unlisted UI alias.
const modelId = pickListedId(chatIds, requestedModel);
const embeddingModelId = pickListedId(embedIds, options.embeddingModelId?.trim() || null);

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed. If the UI supplies an embedding alias, we match it against every listed /v1/models id first (so my-model works), then exclude that id from chat candidates. c70b086.

Comment thread src/lib/endpoint-self-test.ts Outdated
Comment thread src/lib/endpoint-self-test.ts Outdated
Comment thread src/routes/+page.svelte Outdated
Comment thread docs/ADMIN.md Outdated
… self-test

Preserve smoke/process exit codes through quit-flush. Treat spawnSync null status as failure. Classify chat/embeddings as path segments. Pick a requested embedding id even without embed in the name, validate every vector element, and only pass disconnect if the body reader settles. Show Flint-verified per model.
@joelst
joelst added this pull request to stack #123 September 18, 2026 19:37
@joelst
joelst merged commit 8b2d303 into main Sep 18, 2026
11 checks passed
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.

2 participants