import { expect, test } from "vitest"; import { migrateWorkspaceV3Yaml, parseWorkspaceYaml } from "../src/workspaces/schema.js"; const legacy = `workspace: schema_version: 3 id: abc name: Example language: en dwh: engine: postgres database: warehouse schema: public supported_transports: [postgres_direct] semantic_index: vector_store: {engine: qdrant, collection: abc, dimensions: 1024, distance: cosine} embedding: {provider: ollama_internal, model: qwen3-embedding:0.6b, dimensions: 1024} llm_policy: default: zai/glm-5.3 allowed: [zai/glm-5.3] `; test("strict workspace v4 rejects model-bearing v3 descriptors", () => { expect(() => parseWorkspaceYaml(legacy)).toThrow(); }); test("v3 to v4 migration removes only model/vector policy and bumps the version", () => { const migrated = migrateWorkspaceV3Yaml(legacy); const workspace = parseWorkspaceYaml(migrated); expect(workspace.workspace).toMatchObject({ schema_version: 4, id: "abc" }); expect(migrated).not.toMatch(/semantic_index|llm_policy/); expect(workspace.dwh).toEqual({ engine: "postgres", database: "warehouse", schema: "public", supported_transports: ["postgres_direct"], }); });