Skip to content

Release 1.5.2: audit fixes, changelog, Electron and zod updates - #629

Merged
Sev7eNup merged 4 commits into
mainfrom
release/1.5.2
Oct 24, 2026
Merged

Sev7eNup merged 4 commits into
mainfrom
release/1.5.2

Conversation

@Sev7eNup

Copy link
Copy Markdown
Owner

Brings the audit fixes that were only committed locally onto main and prepares 1.5.2.

Merge with a merge commit so the build commit stays on main. The tag is set after the release lab runs.

🤖 Generated with Claude Code

Sev7eNup and others added 3 commits October 24, 2026 11:14
Correct step-test snapshots and target validation, cleanup safety, retention recovery, cross-tab authentication, script editing, command selection, scheduler joins, and ancestor traversal. Include regression tests and updated documentation.

Refs #575, #587, #588, #589, #590, #591, #592, #593, #594.
Merge the two Unreleased sections, settle the Electron entry on 44.9.0, add the
audit fixes and the dompurify update, and date the release.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
npm audit rejects Electron 44.9.0 (GHSA-jr5w-w6x2-84p9, fixed in 44.9.3) and
zod below 4.6.6 (GHSA-mrhx-c7xc-m3w5), so the CI audit steps would fail. The
embedded Node release stays 24.22.0. Only the zod lock entries change in the UI
and docs lockfiles.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Comment on lines +131 to +134
window.dispatchEvent(new StorageEvent('storage', {
key: AUTH_BOUNDARY_STORAGE_KEY,
newValue: JSON.stringify({ ...event, sourceId: 'second-tab', eventId: 'same-session-probe' }),
}));
Comment on lines +294 to +301
window.dispatchEvent(new StorageEvent('storage', {
key: AUTH_BOUNDARY_STORAGE_KEY,
newValue: JSON.stringify({
version: 1, type: 'identity', userId: observed.userId,
observation: { username: observed.username, role: observed.role },
sourceId: 'another-tab', eventId: `observed-${change}`,
} satisfies AuthBoundaryEvent),
}));
Comment on lines +594 to +597
const dispatch = (event: AuthBoundaryEvent) => window.dispatchEvent(new StorageEvent('storage', {
key: AUTH_BOUNDARY_STORAGE_KEY,
newValue: JSON.stringify(event),
}));
var configOverride = request?.ConfigOverride;
if (configOverride.HasValue)
var stepOverride = request?.StepOverride;
if (configOverride.HasValue && stepOverride.HasValue)
var stepOverride = request?.StepOverride;
if (configOverride.HasValue && stepOverride.HasValue)
return BadRequest(new { message = "Config override and step override cannot be combined" });
if (configOverride.HasValue || stepOverride.HasValue)
Comment on lines +203 to +206
catch (Exception ex)
{
_logger.LogWarning(ex, "Could not verify the audit delete outcome for {Archive}", archivedFilePath);
}
public async Task Cleanup_OnlyDeletesAfterSuccessfulArchiveAndVerification(string? failedStep)
{
using var sample = JsonDocument.Parse(await File.ReadAllTextAsync(
Path.Combine(RepositoryRoot(), "scripts", "example-temp-file-cleanup-workflow.json"),
private static string RepositoryRoot()
{
for (var directory = new DirectoryInfo(AppContext.BaseDirectory); directory is not null; directory = directory.Parent)
if (File.Exists(Path.Combine(directory.FullName, "NodePilot.slnx")))
{
var ct = TestContext.Current.CancellationToken;
var archiveDir = Path.Combine(Path.GetTempPath(), $"audit-test-{Guid.NewGuid():N}");
var (db, factory, conn) = CreateEnv(scopeInterceptor: new FailAfterCommitInterceptor());
{
var ct = TestContext.Current.CancellationToken;
var archiveDir = Path.Combine(Path.GetTempPath(), $"audit-test-{Guid.NewGuid():N}");
var (db, factory, conn) = CreateEnv(scopeInterceptor: new FailAfterCommitInterceptor());
public async Task PurgeOnceAsync_DeleteOutcomeCannotBeVerified_PreservesArchiveAndStableIdsOnRetry()
{
var ct = TestContext.Current.CancellationToken;
var archiveDir = Path.Combine(Path.GetTempPath(), $"audit-test-{Guid.NewGuid():N}");
var archiveDir = Path.Combine(Path.GetTempPath(), $"audit-test-{Guid.NewGuid():N}");
var reads = new UnavailableReadInterceptor();
var deletes = new FailOnAuditDeleteInterceptor(() => reads.Enabled = true);
var (db, factory, conn) = CreateEnv(deletes, reads);
var archiveDir = Path.Combine(Path.GetTempPath(), $"audit-test-{Guid.NewGuid():N}");
var reads = new UnavailableReadInterceptor();
var deletes = new FailOnAuditDeleteInterceptor(() => reads.Enabled = true);
var (db, factory, conn) = CreateEnv(deletes, reads);
npm audit rejects undici up to 8.12.1 and 7.30.0 (three high advisories), so the
CI audit steps fail. The lockfiles move undici to 8.12.3 in the UI (jsdom) and
7.30.1 in the desktop packaging tree (@electron/get); both stay inside the
declared ranges.

Gitleaks reads the credential key of the dependency icon tones as a generic API
key. The allowlist covers that one line in that one file.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@Sev7eNup
Sev7eNup merged commit 5a56e48 into main Oct 24, 2026
17 checks passed
@Sev7eNup
Sev7eNup deleted the release/1.5.2 branch October 24, 2026 10:06
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