release-2.9.2 (#1566)

* fix: stop full database rewrites on every plugin db call

* fix: restore release video link in 2.9.2 notes

* fix: use TERMIX_PAT in workflows
This commit is contained in:
Luke Gustafson authored and GitHub committed 2026-10-05 20:24:46 -05:00
1 parent 40df00bd95
commit 2b309e9582
19 files changed
+342 -87

No files matched your search

@@ -10,6 +10,7 @@ vi.mock("../../../database/db/index.js", () => ({
}));
const {
createCurrentAuditLogRepository,
createCurrentSessionRepository,
createCurrentRepositoryContext,
createCurrentRepositoryWriteHook,
@@ -119,3 +120,42 @@ it("wires SQLite activity to the periodic flush and token changes to immediate p
else process.env[DATABASE_DIALECT_ENV] = saved;
}
});
// Audit rows land on every audited call; a forced save per row rewrote the
// whole SQLite file each time.
it("saves SQLite audit rows lazily instead of forcing a save per row", async () => {
const saved = process.env[DATABASE_DIALECT_ENV];
process.env[DATABASE_DIALECT_ENV] = "sqlite";
const { getDb } = await import("../../../database/db/index.js");
const { DatabaseSaveTrigger } =
await import("../../../utils/database-save-trigger.js");
const lazy = vi.spyOn(DatabaseSaveTrigger, "triggerSave").mockResolvedValue();
const force = vi.spyOn(DatabaseSaveTrigger, "forceSave").mockResolvedValue();
const query = {
insert: () => query,
values: async () => ({ changes: 1 }),
select: () => query,
from: async () => [{ count: 1 }],
};
vi.mocked(getDb).mockReturnValue(
query as unknown as ReturnType<typeof getDb>,
);
try {
const repo = createCurrentAuditLogRepository();
for (let i = 0; i < 100; i++) {
await repo.create({
userId: null,
username: "plugin:host-metrics",
action: "plugin_db_client",
resourceType: "plugin",
success: true,
});
}
expect(force).not.toHaveBeenCalled();
expect(lazy).toHaveBeenCalledTimes(100);
} finally {
vi.restoreAllMocks();
if (saved === undefined) delete process.env[DATABASE_DIALECT_ENV];
else process.env[DATABASE_DIALECT_ENV] = saved;
}
});