import test from "node:test"; import assert from "node:assert/strict"; import { mkdtemp, writeFile, rm, symlink } from "node:fs/promises"; import os from "node:os"; import path from "node:path"; import { execFile as callback } from "node:child_process"; import { promisify } from "node:util"; import { inspectAuthoringRepository } from "../src/capability-language/authoring-inspect.js"; const execFile = promisify(callback); test("inspection keeps current files and labels historical recovery without granting verification", async context => { const root = await mkdtemp(path.join(os.tmpdir(), "qx-inspection-test-")); context.after(() => rm(root, { recursive: true, force: true })); const git = (...args: string[]) => execFile("git", ["-C", root, ...args]); await git("init"); await writeFile(path.join(root, "interface.qx"), 'interface Example id "interface:example" revision "interface:example@1" {}'); await git("add", "."); await git("-c", "user.name=Test", "-c", "user.email=test@example.test", "commit", "-m", "contract"); const commit = (await git("rev-parse", "HEAD")).stdout.trim(); await writeFile(path.join(root, "interface.qx"), "interface broken {{{"); await writeFile(path.join(root, "new.qx"), 'interface New id "interface:new" revision "interface:new@1" {}'); const inspected = await inspectAuthoringRepository(root); assert.equal(inspected.verificationEvidence, false); assert.equal(inspected.resolutionChecked, false); assert.equal(inspected.files[0].status, "historical"); assert.equal(inspected.files[0].revision, commit); assert.ok(inspected.files[0].currentErrors.length); assert.match(inspected.files[0].declarations[0].source, /Example/); assert.equal(inspected.files[1].status, "current"); assert.match(inspected.files[1].declarations[0].source, /New/); assert.equal((await git("rev-parse", "HEAD")).stdout.trim(), commit); await symlink(path.join(root, "interface.qx"), path.join(root, "linked.qx")); const linked = (await inspectAuthoringRepository(root)).files.find(file => file.file === "linked.qx")!; assert.equal(linked.status, "unavailable"); assert.deepEqual(linked.declarations, []); assert.match(JSON.stringify(linked.currentErrors), /ordinary files/); });