From aa498f4cbba7c8724ca17bad60971fcd97526504 Mon Sep 17 00:00:00 2001 From: yilsem Date: Sat, 5 Sep 2026 15:52:44 +0300 Subject: [PATCH] fix(ide): apply package commit to existing runtime and record actual installed revision --- apps/desktop/electron/active-runtime-state.test.ts | 1 + apps/desktop/electron/active-runtime-state.ts | 3 ++- apps/desktop/electron/bootstrap-runner.test.ts | 4 ++-- apps/desktop/electron/bootstrap-runner.ts | 13 +++++++------ apps/desktop/electron/main.ts | 1 + apps/desktop/package.json | 2 +- package-lock.json | 2 +- 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/apps/desktop/electron/active-runtime-state.test.ts b/apps/desktop/electron/active-runtime-state.test.ts index 2c99b15..cfc1833 100644 --- a/apps/desktop/electron/active-runtime-state.test.ts +++ b/apps/desktop/electron/active-runtime-state.test.ts @@ -13,6 +13,7 @@ test('a package upgrade refreshes only a proven managed runtime, once per packag const stamp = {commit: 'b'.repeat(40), source: 'git'} assert.equal(needsPackagedRuntimeUpgrade(true, stamp, VALID_MARKER), true) assert.equal(needsPackagedRuntimeUpgrade(true, stamp, {...VALID_MARKER, pinnedCommit: stamp.commit}), false) + assert.equal(needsPackagedRuntimeUpgrade(true, stamp, {...VALID_MARKER, pinnedCommit: 'c'.repeat(40), packageCommit: stamp.commit}), false) assert.equal(needsPackagedRuntimeUpgrade(false, stamp, VALID_MARKER), false) assert.equal(needsPackagedRuntimeUpgrade(true, stamp, null), false) assert.equal(needsPackagedRuntimeUpgrade(true, {commit: '0'.repeat(40), source: 'fallback'}, VALID_MARKER), false) diff --git a/apps/desktop/electron/active-runtime-state.ts b/apps/desktop/electron/active-runtime-state.ts index 12bda00..85a2762 100644 --- a/apps/desktop/electron/active-runtime-state.ts +++ b/apps/desktop/electron/active-runtime-state.ts @@ -1,5 +1,6 @@ export interface BootstrapMarkerLike { pinnedCommit?: unknown + packageCommit?: unknown schemaVersion?: unknown } @@ -12,7 +13,7 @@ export function needsPackagedRuntimeUpgrade( ): boolean { return Boolean(packaged && stamp?.source !== 'fallback' && /^[0-9a-f]{40}$/i.test(stamp?.commit || '') && !/^0+$/.test(stamp?.commit || '') && - hasValidBootstrapMarker(marker, 1) && marker?.pinnedCommit !== stamp?.commit) + hasValidBootstrapMarker(marker, 1) && (marker?.packageCommit || marker?.pinnedCommit) !== stamp?.commit) } export interface ActiveRuntimeState { diff --git a/apps/desktop/electron/bootstrap-runner.test.ts b/apps/desktop/electron/bootstrap-runner.test.ts index e94dcf3..c19afdb 100644 --- a/apps/desktop/electron/bootstrap-runner.test.ts +++ b/apps/desktop/electron/bootstrap-runner.test.ts @@ -143,8 +143,8 @@ test('resolveMarkerPinnedCommit prefers real HEAD over fallback stamp zeros', () resolveMarkerPinnedCommit({ commit: 'd'.repeat(40), branch: 'main' }, '/tmp/checkout', { resolveHead: () => realHead }), - 'd'.repeat(40), - 'packaged real pin wins over checkout HEAD' + realHead, + 'marker reports the actual installed checkout, including a preserved newer runtime' ) assert.equal( resolveMarkerPinnedCommit({ commit: ZERO_COMMIT, branch: 'main' }, '/tmp/missing', { diff --git a/apps/desktop/electron/bootstrap-runner.ts b/apps/desktop/electron/bootstrap-runner.ts index e8e09c4..3c9841d 100644 --- a/apps/desktop/electron/bootstrap-runner.ts +++ b/apps/desktop/electron/bootstrap-runner.ts @@ -111,16 +111,16 @@ function resolveMarkerPinnedCommit( ): string | null { const resolveHead = opts.resolveHead || resolveCheckoutHead - if (installStamp && isPinnedCommit(installStamp.commit)) { - return installStamp.commit - } - const head = resolveHead(activeRoot) if (head) { return head } + if (installStamp && isPinnedCommit(installStamp.commit)) { + return installStamp.commit + } + return readExistingPinnedCommit(activeRoot) } @@ -918,14 +918,14 @@ async function runBootstrap(opts) { try { const existingCheckout = hasExistingGitCheckout(activeRoot) - const pinCommit = !existingCheckout + const pinCommit = Boolean(installStamp && isPinnedCommit(installStamp.commit)) || !existingCheckout if (existingCheckout && installStamp && installStamp.commit) { emit({ type: 'log', line: `[bootstrap] existing checkout detected at ${activeRoot}; ` + - `not pinning to packaged install stamp ${installStamp.commit.slice(0, 12)}` + `applying packaged install stamp ${installStamp.commit.slice(0, 12)} with installer rollback protection` }) } @@ -1002,6 +1002,7 @@ async function runBootstrap(opts) { const markerPayload = { pinnedCommit, + packageCommit: installStamp && isPinnedCommit(installStamp.commit) ? installStamp.commit : null, pinnedBranch: installStamp ? installStamp.branch : null } diff --git a/apps/desktop/electron/main.ts b/apps/desktop/electron/main.ts index f30a367..e724d5a 100644 --- a/apps/desktop/electron/main.ts +++ b/apps/desktop/electron/main.ts @@ -4597,6 +4597,7 @@ function writeBootstrapMarker(payload) { const merged = { schemaVersion: BOOTSTRAP_MARKER_SCHEMA_VERSION, pinnedCommit: payload.pinnedCommit || null, + packageCommit: payload.packageCommit || null, pinnedBranch: payload.pinnedBranch || null, completedAt: new Date().toISOString(), desktopVersion: app.getVersion() diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 1057c73..857a6c5 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -2,7 +2,7 @@ "name": "aiturk-ide", "productName": "AITURK IDE", "private": true, - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.3", "description": "TurkServis resmi yapay zekâ geliştirme ortamı. Hermes Agent tabanlıdır.", "author": "AITURK / TurkServis", "repository": { diff --git a/package-lock.json b/package-lock.json index d992e35..25cc3b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,7 +65,7 @@ }, "apps/desktop": { "name": "aiturk-ide", - "version": "1.0.0-beta.2", + "version": "1.0.0-beta.3", "license": "MIT", "dependencies": { "@assistant-ui/core": "0.2.23",