summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/app/App.svelte6
-rw-r--r--src/core/metrics/place.ts14
-rw-r--r--src/vite-env.d.ts3
-rw-r--r--vite.config.ts14
4 files changed, 33 insertions, 4 deletions
diff --git a/src/app/App.svelte b/src/app/App.svelte
index 3024a44..41e68ef 100644
--- a/src/app/App.svelte
+++ b/src/app/App.svelte
@@ -301,6 +301,12 @@
onClose={(id) => store.closeTab(id)}
onNewDraft={() => store.newDraft()}
/>
+ <span
+ class="shrink-0 select-none px-1 font-mono text-[10px] leading-none text-base-content/30"
+ title="Build version (git short hash)"
+ >
+ {__APP_VERSION__}
+ </span>
<button
class="btn btn-square btn-ghost btn-sm mx-1 shrink-0"
aria-label="Toggle sidebar"
diff --git a/src/core/metrics/place.ts b/src/core/metrics/place.ts
index 091fe8f..2402e3e 100644
--- a/src/core/metrics/place.ts
+++ b/src/core/metrics/place.ts
@@ -111,8 +111,11 @@ export function interleaveTurnMetrics(
}
if (bestEntry >= 0) {
usedEntries.add(bestEntry);
- segmentEntry.set(seg, entries[bestEntry]!);
- segmentEntryIndex.set(seg, bestEntry);
+ const e = entries[bestEntry];
+ if (e !== undefined) {
+ segmentEntry.set(seg, e);
+ segmentEntryIndex.set(seg, bestEntry);
+ }
}
}
@@ -123,8 +126,11 @@ export function interleaveTurnMetrics(
while (nextUnused < K && usedEntries.has(nextUnused)) nextUnused++;
if (nextUnused < K) {
usedEntries.add(nextUnused);
- segmentEntry.set(seg, entries[nextUnused]!);
- segmentEntryIndex.set(seg, nextUnused);
+ const e = entries[nextUnused];
+ if (e !== undefined) {
+ segmentEntry.set(seg, e);
+ segmentEntryIndex.set(seg, nextUnused);
+ }
nextUnused++;
}
}
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
index 4078e74..2a2b515 100644
--- a/src/vite-env.d.ts
+++ b/src/vite-env.d.ts
@@ -1,2 +1,5 @@
/// <reference types="svelte" />
/// <reference types="vite/client" />
+
+/** 5-char git short hash, baked at build time (vite.config.ts `define`). */
+declare const __APP_VERSION__: string;
diff --git a/vite.config.ts b/vite.config.ts
index 8ca4beb..bdfabe6 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,3 +1,4 @@
+import { execSync } from "node:child_process";
import { svelte } from "@sveltejs/vite-plugin-svelte";
import tailwindcss from "@tailwindcss/vite";
import { svelteTesting } from "@testing-library/svelte/vite";
@@ -15,9 +16,22 @@ export default defineConfig({
// disables Vite's DNS-rebinding host check. (The WS URL still runs in the browser — set
// VITE_WS_URL to the backend's reachable host when browsing from another device.)
server: { port: 24204, host: true, allowedHosts: true },
+ define: {
+ // Bake the 5-char git short hash at build time so it survives bundling
+ // (incl. arch package deploys). Falls back to "dev" when not in a git repo.
+ __APP_VERSION__: JSON.stringify(getGitShortHash()),
+ },
test: {
environment: "jsdom",
globals: true,
setupFiles: ["./vitest-setup.ts"],
},
});
+
+function getGitShortHash(): string {
+ try {
+ return execSync("git rev-parse --short=5 HEAD", { encoding: "utf-8" }).trim();
+ } catch {
+ return "dev";
+ }
+}