Skip to content

Release v3.7.9 (continued development)#1982

Open
diegosouzapw wants to merge 3 commits intomainfrom
release/v3.7.9
Open

Release v3.7.9 (continued development)#1982
diegosouzapw wants to merge 3 commits intomainfrom
release/v3.7.9

Conversation

@diegosouzapw
Copy link
Copy Markdown
Owner

Release v3.7.9 — Continued Development

Tracking PR for the ongoing v3.7.9 release development cycle.

Replaces the previously merged PR #1959. Development on this branch is still in progress.

Recent Merges

Status

🟡 In Development — do not merge until release is finalized.

chore: add GPT-5.5 Instant model to Codex registry + Node 26 support with CI + improved native SQLite error handling. Integrated into release/v3.7.9
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request updates the model registry with GPT-5.5, refactors the log purging functionality, and enhances SQLite error handling for native module failures. It also updates dependency versions, expands Node.js engine support, and migrates internal documentation links to Next.js Link components. Feedback focuses on ensuring backend compatibility for the new log purge API and translation keys, correcting the documentation breadcrumb path, and addressing potential rendering issues in Storybook. Additionally, there is a concern regarding lost test coverage following the deletion of an encryption test file.

Comment on lines +933 to +940
const res = await fetch("/api/settings/purge-logs", { method: "POST" });
const data = await res.json();
if (res.ok) {
setPurgeLogsStatus({
type: "success",
message:
t("logsPurged", { count: data.deletedCount }) ||
`Purged ${data.deletedCount} old log entries`,
t("logsDeleted", { count: data.deleted }) ||
`Purged ${data.deleted} expired log(s)`,
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.

high

The log purge functionality has been refactored to use a new endpoint (/api/settings/purge-logs via POST) and a new response field (data.deleted). Additionally, the translation key was changed from logsPurged to logsDeleted. Please ensure that the backend API has been updated to match these changes and that the new translation key exists in the i18n JSON files, otherwise this feature will break or show missing translations in the UI.

Comment on lines 29 to 31
<Link href="/" className="hover:text-text-main transition-colors">
>>>>>>> upstream/release/v3.7.9
Docs
</Link>
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.

medium

The breadcrumb link for "Docs" has been changed to point to the root /. Since the documentation is hosted under the /docs path (as seen in the Footer links), this breadcrumb should point to /docs to ensure users are returned to the documentation home rather than the main landing page.

Suggested change
<Link href="/" className="hover:text-text-main transition-colors">
>>>>>>> upstream/release/v3.7.9
Docs
</Link>
<Link href="/docs" className="hover:text-text-main transition-colors">
Docs
</Link>

Comment on lines +69 to +102
describe("migrateLegacyEncryptedString() behavior", () => {
it("should upgrade legacy encrypted tokens to static key tokens", async () => {
const secret = "test-secret-key-12345";
const plaintext = "legacy-token";
const legacyEncrypted = createLegacyEncrypted(plaintext, secret);

vi.stubEnv("STORAGE_ENCRYPTION_KEY", secret);
vi.resetModules();

const { migrateLegacyEncryptedString, decrypt } = await import("@/lib/db/encryption");

const result = migrateLegacyEncryptedString(legacyEncrypted);
expect(result.updated).toBe(true);
expect(result.value).not.toBe(legacyEncrypted);
expect(result.value).toMatch(/^enc:v1:/);

const decrypted = decrypt(result.value);
expect(decrypted).toBe(plaintext);
});

it("should NOT upgrade static-key encrypted tokens", async () => {
vi.stubEnv("STORAGE_ENCRYPTION_KEY", "test-secret-key-12345");
vi.resetModules();

const { encrypt, migrateLegacyEncryptedString } = await import("@/lib/db/encryption");

const plaintext = "modern-token";
const encrypted = encrypt(plaintext);

const result = migrateLegacyEncryptedString(encrypted!);
expect(result.updated).toBe(false);
expect(result.value).toBe(encrypted);
});
});
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.

medium

The file tests/unit/encryption.test.ts was deleted in this PR, but several important test cases (such as encrypt/decrypt roundtrip, encryptConnectionFields, and various edge cases) do not appear to have been migrated to this file. This results in a significant reduction in test coverage for the encryption module. Please ensure all relevant tests are preserved.

},
};
=======
content: '<div className="p-2">Run npm install to get started.</div>',
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.

medium

The content property for the tab was changed from a JSX element to a string containing HTML. Unless the Tabs component has been specifically updated to render raw HTML strings (e.g., via dangerouslySetInnerHTML), this will cause the HTML tags to be rendered as literal text in the UI. It is generally safer to keep this as a JSX element.

Suggested change
content: '<div className="p-2">Run npm install to get started.</div>',
content: <div className="p-2">Run npm install to get started.</div>,

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 5, 2026

CI Coverage Report

  • Coverage job: success
  • PR test policy: success

Coverage artifact was not available for this run.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6d78be72d6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@@ -1,327 +0,0 @@
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Restore encryption tests to mandatory CI test glob

Deleting tests/unit/encryption.test.ts leaves encryption coverage only in tests/unit/encryption.spec.ts, but the required unit/coverage commands and workflow shards still execute tests/unit/*.test.ts (for example in package.json and .github/workflows/ci.yml). This means encryption regressions are no longer exercised by the main CI gates and can merge unnoticed unless someone manually runs npm run test:vitest.

Useful? React with 👍 / 👎.

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented May 5, 2026

Quality Gate Failed Quality Gate failed

Failed conditions
D Reliability Rating on New Code (required ≥ A)
B Maintainability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

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.

4 participants