From ffbb8fc9a5108ace8b2fa40c0ef684c3e9d6016a Mon Sep 17 00:00:00 2001 From: Kelorastus <108483685+Kelorastus@users.noreply.github.com> Date: Wed, 30 Sep 2026 10:53:46 +0200 Subject: [PATCH 01/16] fix --- src-tauri/src/commands.rs | 10 ++ src-tauri/src/launcher.rs | 94 +++++++++++ src-tauri/src/lib.rs | 3 + src-tauri/src/release.rs | 259 ++++++++++++++++++++++++++++++ src/App.svelte | 16 +- src/assets/keyart-dev.webp | Bin 118856 -> 194032 bytes src/components/ActionPanel.svelte | 169 ++++++++++++++++--- src/components/KeyArt.svelte | 22 ++- src/lib/backend.ts | 3 + src/lib/launcher.svelte.ts | 19 +++ src/lib/mock.ts | 26 +++ src/lib/types.ts | 23 +++ 12 files changed, 619 insertions(+), 25 deletions(-) create mode 100644 src-tauri/src/release.rs diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 5508027..7051ddf 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -17,6 +17,16 @@ pub struct SignedIn { username: String, } +#[tauri::command] +pub async fn release_plan(launcher: State<'_, Launcher>) -> CmdResult { + Ok(launcher.release_plan().await) +} + +#[tauri::command] +pub async fn release_run(launcher: State<'_, Launcher>, password: String, with_api: bool) -> CmdResult<()> { + launcher.release_run(password, with_api).await +} + #[tauri::command] pub async fn get_status(launcher: State<'_, Launcher>) -> CmdResult { Ok(launcher.status().await) diff --git a/src-tauri/src/launcher.rs b/src-tauri/src/launcher.rs index 0399158..cabfc34 100644 --- a/src-tauri/src/launcher.rs +++ b/src-tauri/src/launcher.rs @@ -2265,6 +2265,100 @@ impl Launcher { Ok(()) } + // ── releasing, in dev mode ────────────────────────────────────────────── + + /// What a release could do right now: what is live, what this PC's repos hold, and what + /// stands in the way. Read fresh each time the panel opens - Docker and the DHP both + /// change under us. + pub async fn release_plan(&self) -> crate::release::ReleasePlan { + let (dev_root, online, pack_live, install_dir, installed) = { + let inner = self.inner.lock().await; + ( + inner.settings.dev_root.clone(), + inner.online, + inner.available.clone(), + inner.settings.install_path(), + inner.state.installed_version.clone(), + ) + }; + let dev_root = PathBuf::from(dev_root.trim()); + // The commit the LIVE pack was cut from. Read from this PC's own copy of that version, + // which costs nothing; when this PC is on an older version we simply do not know, and + // the panel says so rather than guessing. + let pack_commit = match (&installed, &pack_live) { + (Some(have), Some(live)) if have == live => std::fs::read(Layout::new(&install_dir, have).version_dir().join("manifest.json")) + .ok() + .and_then(|raw| serde_json::from_slice::(&raw).ok()) + .and_then(|m| m.get("source_commit").and_then(|c| c.as_str().map(str::to_string))), + _ => None, + }; + // The launcher's own feed is public, so this needs no token. + let mcp = self.inner.lock().await.settings.mcp_url.clone(); + let feed: Option = match mcp.is_empty() { + true => None, + false => match self + .http + .get(format!("{}/download/{LAUNCHER_FEED}", mcp.trim_end_matches('/'))) + .timeout(Duration::from_secs(10)) + .send() + .await + { + Ok(r) if r.status().is_success() => r.json::().await.ok(), + _ => None, + }, + }; + let launcher_live = feed.as_ref().and_then(|f| f.get("version").and_then(|v| v.as_str().map(str::to_string))); + let launcher_commit = feed.as_ref().and_then(|f| f.get("source_commit").and_then(|v| v.as_str()).filter(|s| !s.is_empty()).map(str::to_string)); + crate::release::plan( + &dev_root, + &dev_root.join("ODIAN_MCP_Server"), + online, + pack_live, + pack_commit, + launcher_live, + launcher_commit, + None, + ) + } + + /// Start a release in its own console. Returns once it has started, not when it is done. + pub async fn release_run(&self, password: String, with_api: bool) -> Result<(), String> { + let plan = self.release_plan().await; + if let Some(why) = plan.blocked { + return Err(why); + } + if password.trim().is_empty() { + return Err("The node's sudo password is needed to cut a pack and to roll the API.".to_string()); + } + let (dev_root, install_dir, pack_live) = { + let inner = self.inner.lock().await; + (inner.settings.dev_root.trim().to_string(), inner.settings.install_path(), inner.available.clone()) + }; + let dev_root = PathBuf::from(dev_root); + let pack_next = pack_live + .as_deref() + .and_then(crate::release::next_pack) + .ok_or("Cannot tell which pack version comes next: the DHP did not say which is live.")?; + // The launcher is only rebuilt when its repo has moved past what is published; without + // that check every press would bump its version for nothing. + let launcher_item = plan.items.iter().find(|i| i.key == "launcher"); + let launcher_next = match launcher_item.map(|i| i.behind) { + Some(Some(false)) => None, + _ => launcher_item + .and_then(|i| i.live.as_deref()) + .and_then(crate::release::next_launcher), + }; + crate::release::run_release( + &dev_root.join("ODIAN_MCP_Server"), + &install_dir.join("state").join("release"), + &pack_next, + launcher_next.as_deref(), + with_api && plan.docker, + &password, + ) + .map(|_| ()) + } + // ── operator-data sync ────────────────────────────────────────────────── /// Sync, unless this run is pretending to be another operator. Whatever it authored is diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index beb4cf9..0f1855b 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -10,6 +10,7 @@ mod localdb; mod market; mod nodejs; mod prune; +mod release; mod settings; mod site; mod stack; @@ -56,6 +57,8 @@ pub fn run() { }) .invoke_handler(tauri::generate_handler![ commands::get_status, + commands::release_plan, + commands::release_run, commands::get_market, commands::apply_market, commands::check_market, diff --git a/src-tauri/src/release.rs b/src-tauri/src/release.rs new file mode 100644 index 0000000..958525a --- /dev/null +++ b/src-tauri/src/release.rs @@ -0,0 +1,259 @@ +//! Cutting a release from the hub, in dev mode. +//! +//! Three artifacts ship from these repos and each has its own pipeline: the ODIAN pack +//! (client + API + tile server), this launcher, and the Engine API container on the +//! cluster. The scripts that do the work already exist and are the ones a person runs by +//! hand; nothing here reimplements them. This decides WHAT is behind and runs them. +//! +//! "Behind" is answered by the commit each published artifact records it was built from. +//! Comparing versions would not do: a version says what was cut, not from what. +use serde::Serialize; +use std::path::{Path, PathBuf}; +use std::process::Command; + +/// What a release could do right now, and what stops it. +#[derive(Clone, Debug, Serialize)] +pub struct ReleasePlan { + /// Docker Desktop answers. Only the Engine API container needs it. + pub docker: bool, + /// The DHP answered its health check: nothing can be published without it. + pub online: bool, + /// The scripts that do the work are where they should be. + pub scripts: bool, + pub items: Vec, + /// Why the whole thing cannot run, in one line; None when it can. + pub blocked: Option, +} + +#[derive(Clone, Debug, Serialize)] +pub struct ReleaseItem { + /// `pack`, `launcher` or `api`. + pub key: &'static str, + pub title: &'static str, + /// The version that is live, when it could be read. + pub live: Option, + /// The repo's HEAD, short. + pub commit: Option, + /// True when the repo has moved past what is published. None when nothing published + /// says which commit it came from - the honest answer until a release records one. + pub behind: Option, + /// Uncommitted changes in its repo: a release from those could not be rebuilt. + pub dirty: bool, + /// What the row says out loud. + pub note: String, +} + +/// Is a Docker daemon answering? The Engine API image is built in one. +pub fn docker_running() -> bool { + run_ok(Command::new("docker").args(["info", "--format", "{{.ServerVersion}}"])) +} + +fn run_ok(cmd: &mut Command) -> bool { + #[cfg(windows)] + { + use std::os::windows::process::CommandExt; + cmd.creation_flags(0x0800_0000); // CREATE_NO_WINDOW + } + cmd.output().map(|o| o.status.success()).unwrap_or(false) +} + +fn git(repo: &Path, args: &[&str]) -> Option { + let mut cmd = Command::new("git"); + cmd.arg("-C").arg(repo).args(args); + #[cfg(windows)] + { + use std::os::windows::process::CommandExt; + cmd.creation_flags(0x0800_0000); + } + let out = cmd.output().ok()?; + out.status.success().then(|| String::from_utf8_lossy(&out.stdout).trim().to_string()) +} + +fn head(repo: &Path) -> Option { + git(repo, &["rev-parse", "HEAD"]) +} + +fn dirty(repo: &Path) -> bool { + git(repo, &["status", "--porcelain"]).is_some_and(|s| !s.trim().is_empty()) +} + +/// One artifact's row: is this repo past what is published? +fn item( + key: &'static str, + title: &'static str, + repo: PathBuf, + live: Option, + published_commit: Option, +) -> ReleaseItem { + let exists = repo.is_dir(); + let commit = exists.then(|| head(&repo)).flatten(); + let dirty = exists && dirty(&repo); + let behind = match (&commit, &published_commit) { + (Some(now), Some(was)) => Some(now != was), + _ => None, + }; + let note = match (exists, &commit, behind, dirty) { + (false, ..) => format!("{} is not in the checkout folder", repo.display()), + (_, None, ..) => "not a git checkout".to_string(), + (_, _, _, true) => "uncommitted changes: commit them before releasing".to_string(), + (_, _, Some(true), _) => "behind: the repo has moved past what is published".to_string(), + (_, _, Some(false), _) => "up to date".to_string(), + (_, _, None, _) => "what is published does not say which commit it came from".to_string(), + }; + ReleaseItem { key, title, live, commit: commit.map(|c| c[..c.len().min(7)].to_string()), behind, dirty, note } +} + +/// Everything the Release panel shows. +pub fn plan( + dev_root: &Path, + mcp_repo: &Path, + online: bool, + pack_live: Option, + pack_commit: Option, + launcher_live: Option, + launcher_commit: Option, + api_live: Option, +) -> ReleasePlan { + let docker = docker_running(); + let scripts = mcp_repo.join("scripts").join("release_pack.ps1").is_file() + && mcp_repo.join("scripts").join("package_launcher.ps1").is_file(); + let items = vec![ + item("pack", "ODIAN", dev_root.join("ODIAN_Engine"), pack_live, pack_commit), + item("launcher", "Launcher", dev_root.join("ODIAN_Launcher"), launcher_live, launcher_commit), + // The container is built from the same Engine checkout as the pack; only its pipeline + // differs, and only it needs Docker. + item("api", "Engine API", dev_root.join("ODIAN_Engine"), api_live, None), + ]; + let blocked = if !online { + Some("The DHP is not answering: nothing can be published.".to_string()) + } else if !scripts { + Some(format!("The release scripts are not in {}.", mcp_repo.display())) + } else if items.iter().any(|i| i.dirty) { + Some("Commit what is open first: a release built from uncommitted work cannot be rebuilt.".to_string()) + } else { + None + }; + ReleasePlan { docker, online, scripts, items, blocked } +} + +/// Cut and publish, in its own console. +/// +/// The three scripts are run as a person runs them, in order, and each decides for itself +/// whether it has anything to do: `release_pack.ps1` stops with "nothing changed" when the +/// repo matches the live manifest, and `deploy-api.ps1` skips the roll when the compiled +/// binary is identical. So "release whatever is behind" needs no prediction here - only +/// that they are run in the right order and that the first real failure stops the rest. +/// +/// The node's sudo password goes in the ENVIRONMENT, not the command line: arguments are +/// readable by anyone who can list processes. +pub fn run_release( + mcp_repo: &Path, + work_dir: &Path, + pack_version: &str, + launcher_version: Option<&str>, + with_api: bool, + sudo: &str, +) -> Result { + let scripts = mcp_repo.join("scripts"); + let mut ps = String::new(); + ps.push_str("$ErrorActionPreference = 'Stop' +"); + ps.push_str("$pw = $env:ODIAN_NODE_SUDO +"); + ps.push_str("$env:ODIAN_NODE_SUDO = $null +"); // out of the environment the scripts inherit + ps.push_str(&format!( + "Write-Host '=== ODIAN pack {pack_version} ===' -ForegroundColor Cyan + & '{}' -Version '{pack_version}' -NodeSudoPw $pw + if ($LASTEXITCODE -notin 0,2) {{ Write-Host 'the pack step failed' -ForegroundColor Red; pause; exit 1 }} + if ($LASTEXITCODE -eq 2) {{ Write-Host 'pack: nothing to release' -ForegroundColor Yellow }} +", + scripts.join("release_pack.ps1").display() + )); + if let Some(v) = launcher_version { + ps.push_str(&format!( + "Write-Host '=== Launcher {v} ===' -ForegroundColor Cyan + & '{}' -Version '{v}' -SiteUrl 'https://engine.odian.fr/dhp' -McpUrl 'https://engine.odian.fr' -AiUrl 'https://engine.odian.fr' -SiteName 'ODIAN test DHP' -Publish + if ($LASTEXITCODE -ne 0) {{ Write-Host 'the launcher step failed' -ForegroundColor Red; pause; exit 1 }} +", + scripts.join("package_launcher.ps1").display() + )); + } + if with_api { + ps.push_str(&format!( + "Write-Host '=== Engine API ===' -ForegroundColor Cyan + & '{}' -NodeSudoPw $pw + if ($LASTEXITCODE -notin 0,3) {{ Write-Host 'the API step failed' -ForegroundColor Red; pause; exit 1 }} +", + // The api script lives with the release skill, beside the others when it is there. + scripts.join("deploy-api.ps1").display() + )); + } + ps.push_str("Write-Host '' +Write-Host 'Release finished.' -ForegroundColor Green +pause +"); + + std::fs::create_dir_all(work_dir).map_err(|e| format!("cannot use {}: {e}", work_dir.display()))?; + let file = work_dir.join("release.ps1"); + std::fs::write(&file, ps).map_err(|e| format!("cannot write {}: {e}", file.display()))?; + + let mut cmd = Command::new("powershell"); + cmd.args(["-NoProfile", "-ExecutionPolicy", "Bypass", "-File"]).arg(&file); + cmd.env("ODIAN_NODE_SUDO", sudo); + #[cfg(windows)] + { + use std::os::windows::process::CommandExt; + cmd.creation_flags(0x0000_0010); // CREATE_NEW_CONSOLE: the developer watches it run + } + cmd.spawn().map_err(|e| format!("cannot start the release: {e}"))?; + Ok(file) +} + +/// `0.71.0` -> `0.72.0`. A pack release is a minor; the patch place is not used. +pub fn next_pack(live: &str) -> Option { + let p: Vec = live.split('.').map_while(|x| x.parse().ok()).collect(); + (p.len() >= 2).then(|| format!("{}.{}.0", p[0], p[1] + 1)) +} + +/// `0.1.38` -> `0.1.39`. +pub fn next_launcher(live: &str) -> Option { + let p: Vec = live.split('.').map_while(|x| x.parse().ok()).collect(); + (p.len() >= 3).then(|| format!("{}.{}.{}", p[0], p[1], p[2] + 1)) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn the_next_version_moves_the_right_place() { + // A pack is a minor (0.71.0 -> 0.72.0); the launcher is a patch (0.1.38 -> 0.1.39). + assert_eq!(next_pack("0.71.0").as_deref(), Some("0.72.0")); + assert_eq!(next_pack("0.9.0").as_deref(), Some("0.10.0"), "ten follows nine"); + assert_eq!(next_launcher("0.1.38").as_deref(), Some("0.1.39")); + assert_eq!(next_launcher("0.1.9").as_deref(), Some("0.1.10")); + // Nonsense from a feed must not become a version number. + assert_eq!(next_pack("").as_deref(), None); + assert_eq!(next_launcher("latest").as_deref(), None); + assert_eq!(next_launcher("0.1").as_deref(), None); + } + + #[test] + fn a_repo_that_matches_what_is_published_is_not_behind() { + // The comparison is COMMIT against COMMIT. Versions cannot answer it: a version says + // what was cut, not from what - which is how a release gets cut twice from one tree. + let same = item("pack", "ODIAN", PathBuf::from("."), Some("0.71.0".into()), head(Path::new("."))); + if same.commit.is_some() { + assert_eq!(same.behind, Some(false), "same commit: nothing to release"); + } + // Nothing published says where it came from: say so rather than guess. + let unknown = item("pack", "ODIAN", PathBuf::from("."), Some("0.71.0".into()), None); + assert_eq!(unknown.behind, None); + assert!(unknown.note.contains("does not say") || unknown.dirty || unknown.commit.is_none()); + // A folder that is not there is named, not silently "up to date". + let missing = item("pack", "ODIAN", PathBuf::from(r"Z:\nothing\here"), None, None); + assert_eq!(missing.behind, None); + assert!(missing.note.contains("not in the checkout folder")); + } +} diff --git a/src/App.svelte b/src/App.svelte index 89817f4..ef382dc 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -14,6 +14,10 @@ let settingsOpen = $state(false); + // Dev mode drops the patch notes: they describe the INSTALLED version, which is not what + // a dev run starts. With that column gone the art has the whole window to sit in. + const dev = $derived(launcher.devOn); + onMount(() => launcher.start()); @@ -21,8 +25,10 @@ (settingsOpen = true)} onOpenMarket={() => launcher.openMarket()} /> -
-
+
+ {#if !dev} +
+ {/if}
@@ -69,6 +75,12 @@ min-height: 0; } + /* No notes column in dev mode: it collapses rather than being hidden, so the hero and the + action panel keep the places they have everywhere else. */ + .hub.dev { + grid-template-columns: 0 minmax(0, 1fr) minmax(360px, 404px); + } + .hero-slot { grid-row: 1; grid-column: 2 / span 2; diff --git a/src/assets/keyart-dev.webp b/src/assets/keyart-dev.webp index f22403ba3b29c44627e39fc8be1b3eb59e8dfc40..a21d1009e78c3e8ebe0d1f7c525f2ead5fcd387d 100644 GIT binary patch literal 194032 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

1S9p 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 diff --git a/src/components/ActionPanel.svelte b/src/components/ActionPanel.svelte index 0ce8afd..a3513ae 100644 --- a/src/components/ActionPanel.svelte +++ b/src/components/ActionPanel.svelte @@ -102,6 +102,7 @@ const devRoot = $derived(launcher.settings?.dev_root ?? ""); const devTarget = $derived(launcher.settings?.dev_target ?? "client"); const devBuild = $derived(launcher.settings?.dev_build ?? false); + const devUserField = $derived(launcher.settings?.dev_user ?? ""); const savingDev = $derived(busy === "settings"); // One stack either way: both clients talk to the same API and the same database, which is // the only way a .exe/web divergence is visible at all. @@ -111,6 +112,24 @@ { key: "both", name: "Both", note: "one stack" }, ] as const; + // ---- releasing ------------------------------------------------------------ + const plan = $derived(launcher.release); + const releasing = $derived(busy === "release"); + let releaseOpen = $state(false); + let nodePassword = $state(""); + let withApi = $state(true); + + async function openRelease() { + releaseOpen = true; + await launcher.loadRelease(); + } + + async function doRelease() { + await launcher.releaseRun(nodePassword, withApi); + nodePassword = ""; // held for the one run, never kept + releaseOpen = false; + } + async function browseCheckout() { const path = await launcher.pickFolder(); if (path) await launcher.setDev({ dev_root: path }); @@ -281,26 +300,85 @@ -

- - {#if s?.online} - - - - {:else} - offline — tiles and data stay as they are +
+ + launcher.setDev({ dev_user: e.currentTarget.value.trim() })} + /> +
+ +
+ + {#if !s?.online} + needs the DHP {/if}
+ {#if releaseOpen} +
+ {#if releasing && !plan} +

Looking at what is live and what this PC holds…

+ {:else if plan} +
    + {#each plan.items as row (row.key)} +
  • + {row.title} + {row.live ?? "—"} + {row.note} +
  • + {/each} +
+
+ DHP {plan.online ? "✓" : "✗"} + Docker {plan.docker ? "✓" : "✗"} + scripts {plan.scripts ? "✓" : "✗"} +
+ {#if plan.blocked} +

{plan.blocked}

+ {:else} + +
+ + +
+

+ Runs in its own window. Each step decides for itself whether it has anything to do. +

+ {/if} + {/if} + +
+ {/if} + + + {#if !devRun}

Name the folder that holds ODIAN_Engine and Launch runs from it.

{:else if devUser} @@ -532,10 +610,6 @@ align-items: center; gap: 0.4rem; } - .dev-row.wrap { - flex-wrap: wrap; - row-gap: 0.3rem; - } .dev-path { flex: 1 1 auto; min-width: 0; @@ -547,6 +621,11 @@ border: 1px solid var(--line, #2a3139); border-radius: 6px; } + .dev-label { + flex: none; + font-size: 0.78rem; + color: var(--text-dim, #9aa3ad); + } .dev-check { display: inline-flex; align-items: center; @@ -554,7 +633,6 @@ font-size: 0.8rem; white-space: nowrap; } - .dev-offline, .dev-note { font-size: 0.75rem; color: var(--text-dim, #9aa3ad); @@ -563,6 +641,53 @@ .dev-note code { font-size: 0.72rem; } + .dev-release { + font-weight: 600; + } + .dev-release-panel { + display: flex; + flex-direction: column; + gap: 0.4rem; + padding: 0.5rem; + border: 1px solid var(--line, #2a3139); + border-radius: 6px; + background: rgba(0, 0, 0, 0.25); + } + .dev-plan { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: 0.2rem; + } + .dev-plan li { + display: grid; + grid-template-columns: 5.5rem 4.5rem 1fr; + gap: 0.4rem; + align-items: baseline; + font-size: 0.76rem; + color: var(--text-dim, #9aa3ad); + } + .dev-plan li.behind .dev-plan-name { + color: #46d17f; + } + .dev-plan li.dirty .dev-plan-note { + color: #e6b35a; + } + .dev-plan-name { + font-weight: 600; + color: inherit; + } + .dev-checks { + display: flex; + gap: 0.7rem; + font-size: 0.72rem; + color: #e06c6c; + } + .dev-checks span.ok { + color: #46d17f; + } .action { display: grid; diff --git a/src/components/KeyArt.svelte b/src/components/KeyArt.svelte index 3531915..c9c16ea 100644 --- a/src/components/KeyArt.svelte +++ b/src/components/KeyArt.svelte @@ -15,7 +15,7 @@ const art = $derived(launcher.devOn ? keyartDev : keyart); - - {#if releaseOpen} -
- {#if releasing && !plan} -

Looking at what is live and what this PC holds…

- {:else if plan} -
    - {#each plan.items as row (row.key)} -
  • - {row.title} - {row.live ?? "—"} - {row.note} -
  • - {/each} -
-
- DHP {plan.online ? "✓" : "✗"} - Docker {plan.docker ? "✓" : "✗"} - scripts {plan.scripts ? "✓" : "✗"} -
- {#if plan.blocked} -

{plan.blocked}

- {:else} - -
- - -
-

- Runs in its own window. Each step decides for itself whether it has anything to do. -

- {/if} - {/if} - -
- {/if} - +
subscribe("status", handler), onInstallProgress: (handler) => subscribe("install-progress", handler), releasePlan: () => invoke("release_plan"), - releaseRun: (password, withApi) => invoke("release_run", { password, withApi }), + releaseRun: (password, withApi, withMcp) => invoke("release_run", { password, withApi, withMcp }), onTileSyncProgress: (handler) => subscribe("tile-sync-progress", handler), onRemoveProgress: (handler) => subscribe("remove-progress", handler), onStack: (handler) => subscribe("stack", handler), diff --git a/src/lib/launcher.svelte.ts b/src/lib/launcher.svelte.ts index 8440e97..d56d618 100644 --- a/src/lib/launcher.svelte.ts +++ b/src/lib/launcher.svelte.ts @@ -414,9 +414,9 @@ class Launcher { }); } - releaseRun(password: string, withApi: boolean) { + releaseRun(password: string, withApi: boolean, withMcp: boolean) { return this.run("release", async () => { - await backend.releaseRun(password, withApi); + await backend.releaseRun(password, withApi, withMcp); this.releaseOpen = false; }); } diff --git a/src/lib/mock.ts b/src/lib/mock.ts index b04fbd4..5240fc1 100644 --- a/src/lib/mock.ts +++ b/src/lib/mock.ts @@ -777,14 +777,16 @@ class MockBackend implements Backend { dirty: false, note: "up to date" }, { key: "api", title: "Engine API", live: null, commit: "a1b2c3d", behind: null, dirty: false, note: "what is published does not say which commit it came from" }, + { key: "mcp", title: "MCP server", live: null, commit: "c7d8e9f", behind: null, + dirty: false, note: "the script asks the node whether it is already running this commit" }, ], }; } - async releaseRun(password: string, withApi: boolean): Promise { + async releaseRun(password: string, withApi: boolean, withMcp: boolean): Promise { await this.wait(400); if (!password.trim()) throw "The node's sudo password is needed to cut a pack and to roll the API."; - this.log("info", `Release started in its own window (browser mock: nothing runs). API: ${withApi}`); + this.log("info", `Release started in its own window (browser mock: nothing runs). API ${withApi}, MCP ${withMcp}`); } async syncNow(): Promise { diff --git a/src/lib/types.ts b/src/lib/types.ts index 0df6239..2f472ff 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -374,7 +374,7 @@ export interface Backend { /** Take the tiles the DHP baked while this PC was away. */ syncTiles(): Promise; releasePlan(): Promise; - releaseRun(password: string, withApi: boolean): Promise; + releaseRun(password: string, withApi: boolean, withMcp: boolean): Promise; /** What the operator has to decide, oldest first. */ getSyncConflicts(): Promise; /** Records one decision; resolves with what is left to decide. */ From feed0fa8699261890dabcb76cc0f3536d2ede339 Mon Sep 17 00:00:00 2001 From: Kelorastus <108483685+Kelorastus@users.noreply.github.com> Date: Wed, 30 Sep 2026 13:13:22 +0200 Subject: [PATCH 06/16] fix --- src-tauri/src/launcher.rs | 45 +++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/src-tauri/src/launcher.rs b/src-tauri/src/launcher.rs index d8880db..41f0bd2 100644 --- a/src-tauri/src/launcher.rs +++ b/src-tauri/src/launcher.rs @@ -2292,23 +2292,40 @@ impl Launcher { .and_then(|m| m.get("source_commit").and_then(|c| c.as_str().map(str::to_string))), _ => None, }; - // The launcher's own feed is public, so this needs no token. + // The launcher's own feeds are public, so this needs no token. let mcp = self.inner.lock().await.settings.mcp_url.clone(); - let feed: Option = match mcp.is_empty() { - true => None, - false => match self - .http - .get(format!("{}/download/{LAUNCHER_FEED}", mcp.trim_end_matches('/'))) - .timeout(Duration::from_secs(10)) - .send() - .await - { - Ok(r) if r.status().is_success() => r.json::().await.ok(), - _ => None, - }, + let base = mcp.trim_end_matches('/').to_string(); + let get = |name: &str| { + let url = format!("{base}/download/{name}"); + let http = self.http.clone(); + let skip = mcp.is_empty(); + async move { + if skip { + return None; + } + match http.get(url).timeout(Duration::from_secs(10)).send().await { + Ok(r) if r.status().is_success() => r.json::().await.ok(), + _ => None, + } + } }; + let feed = get(LAUNCHER_FEED).await; let launcher_live = feed.as_ref().and_then(|f| f.get("version").and_then(|v| v.as_str().map(str::to_string))); - let launcher_commit = feed.as_ref().and_then(|f| f.get("source_commit").and_then(|v| v.as_str()).filter(|s| !s.is_empty()).map(str::to_string)); + // The commit is NOT in the updater feed and must not be put there: that document is + // Tauri's own format and goes out to every launcher in the field. `latest.json`, which + // this pipeline writes itself, carries it. Pair the two only when both name the same + // version - if they disagree, what is published is unknown and the row says so rather + // than claiming "up to date" and skipping a release that was needed. + let latest = get("latest.json").await; + let launcher_commit = match (&launcher_live, &latest) { + (Some(live), Some(l)) + if l.get("kind").and_then(|k| k.as_str()) == Some("launcher") + && l.get("version").and_then(|v| v.as_str()) == Some(live.as_str()) => + { + l.get("source_commit").and_then(|v| v.as_str()).filter(|s| !s.is_empty()).map(str::to_string) + } + _ => None, + }; crate::release::plan( &dev_root, &dev_root.join("ODIAN_MCP_Server"), From 3863809ae85321866c4bc3692fe8816c38a646c6 Mon Sep 17 00:00:00 2001 From: Kelorastus <108483685+Kelorastus@users.noreply.github.com> Date: Wed, 30 Sep 2026 13:36:14 +0200 Subject: [PATCH 07/16] new console --- src-tauri/src/commands.rs | 5 + src-tauri/src/launcher.rs | 20 ++- src-tauri/src/lib.rs | 1 + src-tauri/src/release.rs | 207 ++++++++++++++++++++++++++- src/App.svelte | 8 +- src/components/ActionPanel.svelte | 19 ++- src/components/ReleaseConsole.svelte | 166 +++++++++++++++++++++ src/lib/backend.ts | 2 + src/lib/launcher.svelte.ts | 52 +++++++ src/lib/mock.ts | 35 ++++- src/lib/types.ts | 12 ++ 11 files changed, 513 insertions(+), 14 deletions(-) create mode 100644 src/components/ReleaseConsole.svelte diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 0b4c82c..4d3cb48 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -32,6 +32,11 @@ pub async fn release_run( launcher.release_run(password, with_api, with_mcp).await } +#[tauri::command] +pub fn release_console(launcher: State<'_, Launcher>, since: usize) -> CmdResult { + Ok(launcher.release_console(since)) +} + #[tauri::command] pub async fn get_status(launcher: State<'_, Launcher>) -> CmdResult { Ok(launcher.status().await) diff --git a/src-tauri/src/launcher.rs b/src-tauri/src/launcher.rs index 41f0bd2..fd30b47 100644 --- a/src-tauri/src/launcher.rs +++ b/src-tauri/src/launcher.rs @@ -254,6 +254,8 @@ pub struct Launcher { stack_states: std::sync::Mutex>, sign_in_cancel: Notify, install_cancel: std::sync::Mutex>, + /// What the running release has printed, for the console panel. + release_console: crate::release::Shared, } /// What an operator picked when installing from a drive: the site store an ODIAN drive @@ -414,6 +416,7 @@ impl Launcher { stack_states: std::sync::Mutex::new(Vec::new()), sign_in_cancel: Notify::new(), install_cancel: std::sync::Mutex::new(None), + release_console: Default::default(), }) } @@ -2338,8 +2341,13 @@ impl Launcher { ) } - /// Start a release in its own console. Returns once it has started, not when it is done. + /// Start a release. Returns once it has started, not when it is done: its output arrives + /// in the console panel, which reads `release_console` as it fills. pub async fn release_run(&self, password: String, with_api: bool, with_mcp: bool) -> Result<(), String> { + // Two at once would interleave into one buffer and fight over the same build dirs. + if self.release_console.lock().is_ok_and(|c| c.is_running()) { + return Err("A release is already running: wait for it to finish.".to_string()); + } let plan = self.release_plan().await; if let Some(why) = plan.blocked { return Err(why); @@ -2373,10 +2381,20 @@ impl Launcher { with_api && plan.docker, with_mcp && plan.docker, &password, + &self.release_console, ) .map(|_| ()) } + /// Everything the release has printed since line `since`. + pub fn release_console(&self, since: usize) -> crate::release::ConsoleTail { + match self.release_console.lock() { + Ok(c) => c.tail(since), + // A poisoned lock must not take the window down with it. + Err(e) => e.into_inner().tail(since), + } + } + // ── operator-data sync ────────────────────────────────────────────────── /// Sync, unless this run is pretending to be another operator. Whatever it authored is diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 0f1855b..a77efc1 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -59,6 +59,7 @@ pub fn run() { commands::get_status, commands::release_plan, commands::release_run, + commands::release_console, commands::get_market, commands::apply_market, commands::check_market, diff --git a/src-tauri/src/release.rs b/src-tauri/src/release.rs index 69df9de..5bab2f4 100644 --- a/src-tauri/src/release.rs +++ b/src-tauri/src/release.rs @@ -9,7 +9,7 @@ //! Comparing versions would not do: a version says what was cut, not from what. use serde::Serialize; use std::path::{Path, PathBuf}; -use std::process::Command; +use std::process::{Command, Stdio}; /// What a release could do right now, and what stops it. #[derive(Clone, Debug, Serialize)] @@ -160,7 +160,101 @@ pub fn plan( ReleasePlan { docker, online, scripts, items, blocked } } -/// Cut and publish, in its own console. +/// The Release console's buffer: filled by the running release, read by the window. +/// +/// It sits behind a plain (not async) lock because the threads draining the child's pipes +/// have no async context to lock from. +#[derive(Default)] +pub struct Console { + lines: Vec, + /// How many lines fell off the front, so indices stay stable while it trims. + dropped: usize, + running: bool, + exit: Option, +} + +pub type Shared = std::sync::Arc>; + +/// A release prints a great deal (cargo, npm, docker); keep the tail, not all of it. +const MAX_LINES: usize = 4000; + +/// What the window asks for: everything it has not seen yet. +#[derive(Serialize, Clone)] +pub struct ConsoleTail { + /// Index of the first line returned. + pub from: usize, + pub lines: Vec, + pub total: usize, + pub running: bool, + pub exit: Option, +} + +impl Console { + fn start(&mut self) { + self.lines.clear(); + self.dropped = 0; + self.running = true; + self.exit = None; + } + + fn push(&mut self, line: String) { + self.lines.push(line); + if self.lines.len() > MAX_LINES { + let cut = self.lines.len() - MAX_LINES; + self.lines.drain(..cut); + self.dropped += cut; + } + } + + fn finish(&mut self, exit: Option) { + self.running = false; + self.exit = exit; + } + + pub fn is_running(&self) -> bool { + self.running + } + + /// Everything from `since` on. A `since` already trimmed away starts at the oldest line + /// still held, rather than pretending the dropped ones are still coming. + pub fn tail(&self, since: usize) -> ConsoleTail { + let total = self.dropped + self.lines.len(); + let from = since.clamp(self.dropped, total); + ConsoleTail { + from, + lines: self.lines[from - self.dropped..].to_vec(), + total, + running: self.running, + exit: self.exit, + } + } +} + +/// Drain one of the child's streams into the console, a line at a time. +fn pump(stream: impl std::io::Read, console: Shared) { + use std::io::BufRead; + let mut reader = std::io::BufReader::new(stream); + let mut raw = Vec::new(); + loop { + raw.clear(); + match reader.read_until(b'\n', &mut raw) { + Ok(0) | Err(_) => return, + Ok(_) => { + let text = String::from_utf8_lossy(&raw); + let text = text.trim_end_matches('\n').trim_end_matches('\r'); + // A terminal shows only what follows the last carriage return, so a progress line + // that kept rewriting itself does not become a thousand lines in the panel. + let shown = text.rsplit('\r').next().unwrap_or(text); + match console.lock() { + Ok(mut c) => c.push(shown.to_string()), + Err(_) => return, + } + } + } + } +} + +/// Cut and publish, into the launcher's own console panel. /// /// The three scripts are run as a person runs them, in order, and each decides for itself /// whether it has anything to do: `release_pack.ps1` stops with "nothing changed" when the @@ -178,6 +272,7 @@ pub fn run_release( with_api: bool, with_mcp: bool, sudo: &str, + console: &Shared, ) -> Result { let scripts = mcp_repo.join("scripts"); let log = work_dir.join("release.log"); @@ -229,24 +324,32 @@ pub fn run_release( // Everything inside try/finally, and everything recorded. A step that throws used to // take the window with it - the release simply vanished, with nothing to read. + // + // No `pause` here any more: this runs into the launcher's own panel, where there is no + // console to press Enter in. The exit code carries the verdict instead - swallowing a + // failure and exiting 0 would make a failed release look like a finished one. let ps = format!( "$ErrorActionPreference = 'Stop' + # The pipe gets UTF-8 or Windows' own French messages arrive as mojibake. + [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding $false $pw = $env:ODIAN_NODE_SUDO $env:ODIAN_NODE_SUDO = $null Start-Transcript -Path '{}' -Force | Out-Null + $ok = $true try {{ {} Write-Host '' - Write-Host 'Release finished.' -ForegroundColor Green + Write-Host 'Release finished.' }} catch {{ Write-Host '' - Write-Host \"FAILED: $_\" -ForegroundColor Red + Write-Host \"FAILED: $_\" + $ok = $false }} finally {{ Stop-Transcript | Out-Null Write-Host '' Write-Host 'Log: {}' - pause }} +if (-not $ok) {{ exit 1 }} ", log.display(), body, @@ -260,15 +363,50 @@ pub fn run_release( let mut cmd = Command::new("powershell"); cmd.args(["-NoProfile", "-ExecutionPolicy", "Bypass", "-File"]).arg(&file); cmd.env("ODIAN_NODE_SUDO", sudo); + // Nothing can type into this, so stdin is closed: a script that ever asks a question + // then fails at once instead of hanging forever with no window to answer in. + cmd.stdin(Stdio::null()).stdout(Stdio::piped()).stderr(Stdio::piped()); #[cfg(windows)] { use std::os::windows::process::CommandExt; - cmd.creation_flags(0x0000_0010); // CREATE_NEW_CONSOLE: the developer watches it run + cmd.creation_flags(0x0800_0000); // CREATE_NO_WINDOW: the output belongs in the panel } - cmd.spawn().map_err(|e| format!("cannot start the release: {e}"))?; + let mut child = cmd.spawn().map_err(|e| format!("cannot start the release: {e}"))?; + console.lock().map_err(|_| "the release console is unusable")?.start(); + + // Both streams, kept separate: merging them with `2>&1` inside PowerShell wraps every + // stderr line from a native exe in a NativeCommandError and makes a clean run look failed. + let mut pumps = Vec::new(); + for stream in [child.stdout.take().map(Either::Out), child.stderr.take().map(Either::Err)] { + if let Some(s) = stream { + let c = console.clone(); + pumps.push(std::thread::spawn(move || match s { + Either::Out(r) => pump(r, c), + Either::Err(r) => pump(r, c), + })); + } + } + let c = console.clone(); + std::thread::spawn(move || { + let code = child.wait().ok().and_then(|s| s.code()); + // Drain what is still sitting in the pipes BEFORE saying it finished: the window stops + // asking once running goes false, and the last lines are the ones that say why. + for p in pumps { + let _ = p.join(); + } + if let Ok(mut c) = c.lock() { + c.finish(code); + } + }); Ok(file) } +/// The two pipes have different types; this lets one thread body handle either. +enum Either { + Out(std::process::ChildStdout), + Err(std::process::ChildStderr), +} + /// Where the Engine API deploy script is: beside the other release scripts, or in the /// release skill that carries it. fn api_script(scripts: &Path) -> Option { @@ -363,4 +501,59 @@ mod tests { let _ = std::fs::remove_dir_all(&dir); } + + #[test] + fn the_console_hands_over_only_what_the_window_has_not_seen() { + let mut c = Console::default(); + c.start(); + for i in 0..3 { + c.push(format!("line {i}")); + } + let first = c.tail(0); + assert_eq!(first.from, 0); + assert_eq!(first.total, 3); + assert_eq!(first.lines.len(), 3); + assert!(first.running, "a started console is running"); + + // Asking again from where it got to yields nothing, not the whole buffer again. + let again = c.tail(first.total); + assert!(again.lines.is_empty()); + assert_eq!(again.total, 3); + + c.push("line 3".into()); + let more = c.tail(3); + assert_eq!(more.lines, vec!["line 3".to_string()]); + + c.finish(Some(1)); + let done = c.tail(4); + assert!(!done.running); + assert_eq!(done.exit, Some(1), "a failed release must not look finished"); + } + + #[test] + fn trimming_a_long_release_keeps_indices_honest() { + let mut c = Console::default(); + c.start(); + for i in 0..(MAX_LINES + 500) { + c.push(format!("line {i}")); + } + let t = c.tail(0); + assert_eq!(t.total, MAX_LINES + 500, "total counts every line ever printed"); + assert_eq!(t.lines.len(), MAX_LINES, "only the tail is kept"); + assert_eq!(t.from, 500, "it says where it really starts, not 0"); + assert_eq!(t.lines[0], "line 500"); + // A window that asked from beyond the end gets nothing rather than a panic. + assert!(c.tail(t.total + 99).lines.is_empty()); + } + + #[test] + fn a_progress_line_that_rewrites_itself_stays_one_line() { + let stream: &[u8] = b"first\r\nbuilding 10%\rbuilding 90%\rbuilt\nplain\n"; + let c: Shared = Default::default(); + c.lock().unwrap().start(); + pump(stream, c.clone()); + let got = c.lock().unwrap().tail(0); + // CRLF is an ending, not content; a lone CR overwrites, exactly as a terminal shows it. + assert_eq!(got.lines, vec!["first".to_string(), "built".to_string(), "plain".to_string()]); + } } diff --git a/src/App.svelte b/src/App.svelte index 1a3420d..3efc662 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -6,6 +6,7 @@ import KeyArt from "./components/KeyArt.svelte"; import MarketplaceDrawer from "./components/MarketplaceDrawer.svelte"; import NewsPanel from "./components/NewsPanel.svelte"; + import ReleaseConsole from "./components/ReleaseConsole.svelte"; import ReleasePanel from "./components/ReleasePanel.svelte"; import SettingsDrawer from "./components/SettingsDrawer.svelte"; import SyncPanel from "./components/SyncPanel.svelte"; @@ -18,6 +19,9 @@ // Dev mode drops the patch notes: they describe the INSTALLED version, which is not what // a dev run starts. With that column gone the art has the whole window to sit in. const dev = $derived(launcher.devOn); + // A release takes that column back while it runs: its output is the one thing worth + // reading there, and it is where a developer is already looking. + const showConsole = $derived(dev && launcher.consoleOpen); onMount(() => launcher.start()); @@ -26,9 +30,11 @@ (settingsOpen = true)} onOpenMarket={() => launcher.openMarket()} /> -
+
{#if !dev}
+ {:else if showConsole} +
{/if}
diff --git a/src/components/ActionPanel.svelte b/src/components/ActionPanel.svelte index 0c77cd5..bd82a09 100644 --- a/src/components/ActionPanel.svelte +++ b/src/components/ActionPanel.svelte @@ -118,6 +118,11 @@ await launcher.loadRelease(); } + // While one runs, this button is the way BACK to its output rather than a way to start a + // second: closing the console otherwise left a running release with nowhere to be seen. + const releasing = $derived(launcher.consoleRunning); + const hasOutput = $derived(launcher.consoleLines.length > 0 && !launcher.consoleOpen); + async function browseCheckout() { const path = await launcher.pickFolder(); if (path) await launcher.setDev({ dev_root: path }); @@ -304,10 +309,16 @@
- - {#if !s?.online} + {#if releasing} + + {:else} + + {/if} + {#if hasOutput && !releasing} + + {:else if !s?.online} needs the DHP {/if}
diff --git a/src/components/ReleaseConsole.svelte b/src/components/ReleaseConsole.svelte new file mode 100644 index 0000000..420c339 --- /dev/null +++ b/src/components/ReleaseConsole.svelte @@ -0,0 +1,166 @@ + + +
+
+

Release

+ + {#if running} + running + {:else if exit === null} + idle + {:else if exit === 0} + finished + {:else} + failed ({exit}) + {/if} + + + {lines.length} + +
+ + + +
+ {#if lines.length} + {#each lines as line, i (i)} +
{line || " "}
+ {/each} + {:else} +

Waiting for the first line…

+ {/if} +
+ + {#if !running && exit !== null} +
+ {exit === 0 ? "Closing this keeps the output until the next release." : "The full transcript is in state\\release\\release.log."} +
+ {/if} +
+ + diff --git a/src/lib/backend.ts b/src/lib/backend.ts index 507e302..c39c8db 100644 --- a/src/lib/backend.ts +++ b/src/lib/backend.ts @@ -15,6 +15,7 @@ import type { SignInResult, StackEvent, Status, + ReleaseConsoleTail, ReleasePlan, RemoveProgress, SyncConflict, @@ -73,6 +74,7 @@ function createTauriBackend(): Backend { onInstallProgress: (handler) => subscribe("install-progress", handler), releasePlan: () => invoke("release_plan"), releaseRun: (password, withApi, withMcp) => invoke("release_run", { password, withApi, withMcp }), + releaseConsole: (since) => invoke("release_console", { since }), onTileSyncProgress: (handler) => subscribe("tile-sync-progress", handler), onRemoveProgress: (handler) => subscribe("remove-progress", handler), onStack: (handler) => subscribe("stack", handler), diff --git a/src/lib/launcher.svelte.ts b/src/lib/launcher.svelte.ts index d56d618..7ca6eff 100644 --- a/src/lib/launcher.svelte.ts +++ b/src/lib/launcher.svelte.ts @@ -418,9 +418,61 @@ class Launcher { return this.run("release", async () => { await backend.releaseRun(password, withApi, withMcp); this.releaseOpen = false; + // Straight into the console: the release is running with nowhere else to show itself. + this.consoleLines = []; + this.consoleTotal = 0; + this.consoleExit = null; + this.consoleRunning = true; + this.consoleOpen = true; + this.pollConsole(); }); } + // ---- the release console ------------------------------------------------------------- + /** Shown in the notes column in dev mode, where the patch notes sit otherwise. */ + consoleOpen = $state(false); + consoleLines = $state([]); + consoleRunning = $state(false); + consoleExit = $state(null); + /** How many lines have been taken, so each poll asks only for what is new. */ + private consoleTotal = 0; + private polling = false; + + /** Polled rather than pushed: reopening the panel then needs no replay, and a slow window + * cannot fall behind a build that prints thousands of lines. */ + private async pollConsole() { + if (this.polling) return; + this.polling = true; + try { + for (;;) { + const tail = await backend.releaseConsole(this.consoleTotal); + if (tail.from > this.consoleTotal && this.consoleLines.length) { + this.consoleLines.push(`... ${tail.from - this.consoleTotal} earlier lines dropped`); + } + if (tail.lines.length) this.consoleLines.push(...tail.lines); + this.consoleTotal = tail.total; + this.consoleRunning = tail.running; + this.consoleExit = tail.exit; + if (!tail.running) return; + await new Promise((r) => setTimeout(r, 400)); + } + } catch { + this.consoleRunning = false; + } finally { + this.polling = false; + } + } + + /** Reopen it after it was closed; a finished release keeps its output to be read. */ + showConsole() { + this.consoleOpen = true; + if (this.consoleRunning) this.pollConsole(); + } + + closeConsole() { + this.consoleOpen = false; + } + /** Change part of the settings and save, for the dev controls on the hub. */ setDev(change: Partial) { const current = this.settings; diff --git a/src/lib/mock.ts b/src/lib/mock.ts index 5240fc1..546277a 100644 --- a/src/lib/mock.ts +++ b/src/lib/mock.ts @@ -24,6 +24,7 @@ import { type MarketItem, type MockControls, type MockScenario, + type ReleaseConsoleTail, type ReleasePlan, type Settings, type SignInResult, @@ -786,7 +787,39 @@ class MockBackend implements Backend { async releaseRun(password: string, withApi: boolean, withMcp: boolean): Promise { await this.wait(400); if (!password.trim()) throw "The node's sudo password is needed to cut a pack and to roll the API."; - this.log("info", `Release started in its own window (browser mock: nothing runs). API ${withApi}, MCP ${withMcp}`); + // Nothing runs in the browser, so play a short script into the console instead: enough + // to see the panel fill, scroll and finish. + this.consoleLines = ["=== ODIAN pack 0.74.0 ===", "", "=== Preflight ==="]; + this.consoleDone = null; + const rest = [ + "engine at 1255873...", + "Nothing that ships has changed. No pack cut.", + "pack: nothing to release", + `=== Launcher 0.1.40 === (API ${withApi}, MCP ${withMcp})`, + "npx tauri build ...", + "Release finished.", + ]; + void (async () => { + for (const line of rest) { + await this.wait(700); + this.consoleLines.push(line); + } + this.consoleDone = 0; + })(); + } + + private consoleLines: string[] = []; + private consoleDone: number | null = 0; + + async releaseConsole(since: number): Promise { + await this.wait(60); + return { + from: Math.min(since, this.consoleLines.length), + lines: this.consoleLines.slice(since), + total: this.consoleLines.length, + running: this.consoleDone === null, + exit: this.consoleDone, + }; } async syncNow(): Promise { diff --git a/src/lib/types.ts b/src/lib/types.ts index 2f472ff..f72d773 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -306,6 +306,17 @@ export interface ReleasePlan { blocked: string | null; } +/** A slice of the running release's output: what the window has not shown yet. */ +export interface ReleaseConsoleTail { + /** Index of the first line returned; higher than asked for when older lines were trimmed. */ + from: number; + lines: string[]; + total: number; + running: boolean; + /** Null while running; 0 means it finished, anything else means it failed. */ + exit: number | null; +} + export const DEV_TARGETS = ["client", "web", "both"] as const; export type DevTarget = (typeof DEV_TARGETS)[number]; @@ -375,6 +386,7 @@ export interface Backend { syncTiles(): Promise; releasePlan(): Promise; releaseRun(password: string, withApi: boolean, withMcp: boolean): Promise; + releaseConsole(since: number): Promise; /** What the operator has to decide, oldest first. */ getSyncConflicts(): Promise; /** Records one decision; resolves with what is left to decide. */ From 8988ad8b06fd8900c1675ada102075be50a79ae2 Mon Sep 17 00:00:00 2001 From: Kelorastus <108483685+Kelorastus@users.noreply.github.com> Date: Wed, 30 Sep 2026 15:01:58 +0200 Subject: [PATCH 08/16] fix --- src-tauri/src/launcher.rs | 164 ++++++++++++++++-- src-tauri/src/stack.rs | 273 +++++++++++++++++++++++++++--- src-tauri/tauri.conf.json | 2 +- src/components/ActionPanel.svelte | 16 ++ src/lib/launcher.svelte.ts | 8 +- src/lib/mock.ts | 26 ++- src/lib/types.ts | 7 + 7 files changed, 448 insertions(+), 48 deletions(-) diff --git a/src-tauri/src/launcher.rs b/src-tauri/src/launcher.rs index fd30b47..1617356 100644 --- a/src-tauri/src/launcher.rs +++ b/src-tauri/src/launcher.rs @@ -19,7 +19,7 @@ use crate::market; use crate::prune; use crate::settings::{normalize_url, Settings}; use crate::site::{self, SessionRefresh, TokenCheck}; -use crate::stack::{self, Layout, RunningStack, StackConfig, StackEvent}; +use crate::stack::{self, DhpDirect, Layout, RunningStack, StackConfig, StackEvent}; use crate::state::{self, LauncherState, SyncOrigin}; use crate::sync::{self, SyncError, SyncStatus}; use crate::devmode::{self, Licence}; @@ -65,6 +65,13 @@ pub struct Status { pub available: Option, pub update_required: bool, pub can_launch: bool, + /// This launch would come from the dev checkout. It is what lets an out-of-date install + /// still launch: see `can_launch`. + pub dev_run: bool, + /// This launch would start the client alone, against the DHP, with nothing installed. + pub dhp_direct: bool, + /// On a licensed PC with nothing installed, why that is not on offer. None when it is. + pub dhp_blocked: Option, pub phase: Phase, pub error: Option, pub install_dir: String, @@ -198,6 +205,15 @@ struct Inner { drive_extras: Option>, } +/// Whether Launch may go ahead. +/// +/// The only case allowed to be out of date is a dev run: it starts the client from the +/// checkout, and the install it sits on just supplies the data layer, which an older pack +/// serves perfectly well. Every other PC updates first. +fn launchable(installed: bool, update_required: bool, dev_run: bool, busy: bool) -> bool { + installed && (!update_required || dev_run) && !busy +} + impl Inner { /// Take `url` as the DHP's Engine API, and keep it in launcher.json so a launcher started /// offline next time still arms live mode with it. Err is only the save failing: the @@ -217,19 +233,36 @@ impl Inner { // Online means "update before launch"; offline launches whatever is installed. // Nothing installed is never "update required": that is a first install. let update_required = self.online && installed.is_some() && self.available.is_some() && installed != self.available; + // A dev run takes its CLIENT from the checkout; the install only supplies the data + // layer - database, tiles, API, tile server - and an older pack serves that perfectly + // well. So a newer pack on the DHP is news, not a gate. Without this, cutting a release + // stopped every dev PC until it downloaded a 900 MB pack it was not going to run. + let dev_run = Launcher::dev_engine(self).is_some(); + // With nothing installed a dev run can still go straight to the DHP, so Launch is + // offered where the hub would otherwise only ever offer Install. + let dhp_direct = Launcher::dhp_direct(self).is_some(); + // With a licence and nothing installed, say WHY a DHP run is not on offer. Every one of + // these used to read as a bare "ODIAN is not installed", which points at the wrong thing. + let dhp_blocked = (self.dev.is_some() && installed.is_none() && !dhp_direct) + .then(|| Launcher::why_no_dhp_run(self)); Status { online: self.online, site: SiteInfo { url: self.settings.site_url.clone(), name: self.settings.site_name.clone() }, operator: self.state.operator.clone(), // Remembered until Sign out: a launcher session renews the Engine token on its own. signed_in: self.token.as_ref().is_some_and(|t| t.launcher_token.is_some() || !t.expired()), - can_launch: installed.is_some() - && !update_required - && !self.updating_self - && matches!(self.phase, Phase::Idle | Phase::Error), + can_launch: launchable( + installed.is_some() || dhp_direct, + update_required, + dev_run, + self.updating_self || !matches!(self.phase, Phase::Idle | Phase::Error), + ), installed, available: self.available.clone(), update_required, + dev_run, + dhp_direct, + dhp_blocked, // Updating itself reads as "checking": the window already shows that at every start. phase: if self.updating_self && matches!(self.phase, Phase::Idle | Phase::Error) { Phase::Checking } else { self.phase }, error: self.error.clone(), @@ -659,6 +692,62 @@ impl Launcher { repo.join("tools").join("build").join("build.bat").is_file().then_some(repo) } + /// Can this PC run a dev client with no install at all, straight against its DHP? + /// + /// Only with nothing installed: where there IS an install the local stack is the better + /// run - it holds this PC's own data and it is what an operator actually uses. This is + /// purely the case that used to be refused outright. + /// + /// Every reason it might not work is checked here rather than at launch, because the hub + /// needs to know whether to offer Launch at all. + fn dhp_direct(inner: &Inner) -> Option { + if Self::dev_engine(inner).is_none() || !inner.online || inner.state.installed_version.is_some() { + return None; + } + let mcp = inner.settings.mcp_url.trim(); + if mcp.is_empty() { + return None; + } + Some(DhpDirect { + engine_url: inner.engine_url.clone()?, + mcp_url: mcp.to_string(), + // Beside the install dir it would have used, so a later real install finds its own + // state untouched. + cache_dir: inner.settings.install_path().join("state").join("devclient"), + }) + } + + /// Why a PC with nothing installed cannot do a DHP-direct run either. Each of these was + /// a silent "ODIAN is not installed" before, which sent people looking in the wrong place. + fn why_no_dhp_run(inner: &Inner) -> String { + if Self::dev_engine(inner).is_none() { + let root = inner.settings.dev_root.trim(); + if !inner.settings.dev_mode { + return "Dev mode is off. Turn it on to run from a checkout with nothing installed.".to_string(); + } + if root.is_empty() { + return "Dev mode has no checkout folder yet: name the folder that holds ODIAN_Engine.".to_string(); + } + return format!( + "{root}{sep}ODIAN_Engine{sep}tools{sep}build{sep}build.bat is not there, so there is no checkout to run. Check the folder below is the right one.", + sep = "\\" + ); + } + if !inner.online { + return "Nothing is installed here, so this run needs the DHP - and it is not answering. Connect to it, or install once so this PC has its own data." + .to_string(); + } + if inner.settings.mcp_url.trim().is_empty() { + return "No MCP address is set, and that is what the client signs in through. Set it in Settings, or install once." + .to_string(); + } + if inner.engine_url.is_none() { + return "The DHP has not said where its Engine API is, so there is nothing to point the client at. Check the connection, or install once." + .to_string(); + } + "ODIAN is not installed.".to_string() + } + /// Look for this PC's dev licence. /// /// Cheap enough to do on every check - one small file - so dropping a licence in is @@ -1890,19 +1979,29 @@ impl Launcher { let config = { let mut inner = self.inner.lock().await; let status = inner.status(); - if status.update_required { + // Not for a dev run: that starts the checkout, so what the DHP published is beside + // the point. An operator install still has to update first. + if status.update_required && !status.dev_run { return Err("An update is available: update before launching while connected to the DHP.".to_string()); } if !status.can_launch { return Err("ODIAN isn't ready to launch.".to_string()); } - let operator = inner - .state - .operator - .clone() - .ok_or("Sign in once while connected, so the launcher knows which operator to start ODIAN as.")?; - let version = inner.state.installed_version.clone().ok_or("ODIAN is not installed.")?; - if inner.state.pg_password.is_empty() || inner.state.db_snapshot.is_none() { + let dhp = Self::dhp_direct(&inner); + // Nothing installed and no DHP-direct run available: say which of the two is missing, + // rather than "ODIAN is not installed" when the real problem is the target or the MCP. + if dhp.is_none() && inner.state.installed_version.is_none() { + return Err(Self::why_no_dhp_run(&inner)); + } + // The client signs ITSELF in on a DHP-direct run, so there is no operator to carry. + let operator = match &dhp { + Some(_) => inner.state.operator.clone().unwrap_or_default(), + None => inner.state.operator.clone().ok_or( + "Sign in once while connected, so the launcher knows which operator to start ODIAN as.", + )?, + }; + let version = inner.state.installed_version.clone().unwrap_or_default(); + if dhp.is_none() && (inner.state.pg_password.is_empty() || inner.state.db_snapshot.is_none()) { return Err("The local database was never set up. Reinstall from the DHP or a drive.".to_string()); } let install_dir = inner.settings.install_path(); @@ -1913,9 +2012,13 @@ impl Launcher { let layout = Layout::new(&install_dir, &version); let dev = Self::dev_engine(&inner); let dev_user = Self::dev_swap(&inner); - let tile_sets = stack::installed_tile_sets(&layout)?; - // What the DHP can draw for this PC, beyond what it downloaded. - let site_tile_sets = stack::version_tile_sets(&layout)?; + // A DHP-direct run has no installed version to read either list out of: this PC draws + // nothing of its own, and the site draws everything. + let (tile_sets, site_tile_sets) = match &dhp { + // No manifest to read either list from; the client uses its own default styles. + Some(_) => (Vec::new(), Vec::new()), + None => (stack::installed_tile_sets(&layout)?, stack::version_tile_sets(&layout)?), + }; inner.phase = Phase::Launching; inner.error = None; StackConfig { @@ -1928,6 +2031,7 @@ impl Launcher { dev_engine: dev, dev_user: dev_user.clone(), dev_target: inner.settings.dev_target, + dhp, tile_sets, site_tile_sets, // A swapped run never reaches the DHP: no upstream token is written, so the local @@ -2795,6 +2899,34 @@ fn swapped_user<'a>(asked: &'a str, operator: Option<&str>) -> Option<&'a str> { mod tests { use super::*; + #[test] + fn nothing_installed_still_launches_when_the_dhp_can_stand_in() { + // The whole point of the DHP-direct run: a checkout and a reachable DHP are enough. + assert!(launchable(true, false, true, false), "installed, dev: launches"); + // `installed` is passed as "installed OR a DHP-direct run is available", so this is the + // no-install case arriving as launchable. + assert!(launchable(true, false, true, false)); + // Nothing installed AND no DHP to stand in: still refused, and it should be. + assert!(!launchable(false, false, true, false), "no install, no DHP: nothing to run"); + assert!(!launchable(false, false, false, false)); + } + + #[test] + fn a_dev_run_launches_even_when_the_dhp_has_a_newer_pack() { + // What used to happen: cutting a release made every dev PC refuse to launch until it + // downloaded a pack it was never going to run. + assert!(launchable(true, true, true, false), "behind, but the client comes from the checkout"); + assert!(launchable(true, false, true, false)); + // An operator PC still updates first - that one really does run the pack. + assert!(!launchable(true, true, false, false), "not a dev run: update first"); + assert!(launchable(true, false, false, false)); + // Nothing installed is never launchable: a dev run still needs the database, the tiles + // and the API, and those only come from an install. + assert!(!launchable(false, false, true, false), "a checkout alone is not enough to run"); + // Mid-operation, nothing launches. + assert!(!launchable(true, false, true, true)); + } + #[test] fn a_dependency_added_since_the_last_install_is_noticed() { use std::time::{Duration, SystemTime}; diff --git a/src-tauri/src/stack.rs b/src-tauri/src/stack.rs index 985dfd9..9ddf39f 100644 --- a/src-tauri/src/stack.rs +++ b/src-tauri/src/stack.rs @@ -192,9 +192,13 @@ pub struct StackConfig { /// the site draws the ones this PC never downloaded. Without one it sees only /// `tile_sets`, because nothing else could be drawn. pub site_tile_sets: Vec, - /// Dev mode: the ODIAN_Engine checkout this run takes its CLIENT from, instead of the - /// installed version. Everything else is the install's - the database, the tiles, the - /// API, the tile server - so a dev run needs no download and shows real data. + /// Dev mode: the ODIAN_Engine checkout this run takes its CLIENT, its API and its tile + /// server from, instead of the installed version - see `odian_exe`, `api_exe` and + /// `tile_server_dir`, which all branch on this. + /// + /// What still comes from the INSTALL is the data layer and the runtimes it needs: the + /// database, the tiles, the Python the tile server runs on, and Postgres itself. So a dev + /// run shows real data and needs no download - but it does need an install to sit on. /// /// Only ever Some on a PC with a valid dev licence: the launcher will not fill it in /// otherwise, whatever the settings file says. @@ -210,6 +214,37 @@ pub struct StackConfig { /// Dev mode: which client(s) this run starts. Ignored without `dev_engine` - an operator /// install has no web client to run, and only ever starts the one. pub dev_target: DevTarget, + /// Dev mode, no local data layer: Some means nothing local starts and the client talks + /// straight to the DHP. See `DhpDirect`. + pub dhp: Option, +} + +/// Where a web dev run sends its traffic. `api`/`mcp` are empty for an ordinary local run, +/// which takes those from the URL the launcher opens instead. +#[derive(Clone, Debug)] +pub struct WebPoints { + pub tiles: String, + pub api: String, + pub mcp: String, +} + +/// A dev run with no install behind it: the client talks straight to the DHP. +/// +/// Nothing local starts - no Postgres, no Engine API, no tile server - so this needs no +/// installed version at all, which is the whole point: a checkout and a DHP are enough. +/// +/// The client signs itself in through the MCP broker and carries the CLUSTER's token, which +/// is exactly what the shipped .exe does. The launcher's silent mint is NOT used here: it +/// signs with a secret only a local API holds, and the cluster does not share it. So this +/// run shows the client's own sign-in once, instead of arriving already signed in. +#[derive(Clone, Debug)] +pub struct DhpDirect { + /// The DHP's Engine API - what the local one would have forwarded to. + pub engine_url: String, + /// The MCP: the broker the client signs in through, and the AI features. + pub mcp_url: String, + /// Where the client keeps its caches and logs, since there is no install to keep them in. + pub cache_dir: PathBuf, } impl StackConfig { @@ -223,6 +258,15 @@ impl StackConfig { } } + /// The client's own folder of writable state. A DHP-direct run has no install to put it + /// in, so it gets one of its own. + fn client_dir(&self) -> PathBuf { + match &self.dhp { + Some(dhp) => dhp.cache_dir.clone(), + None => self.layout.state_dir().join("client"), + } + } + fn odian_exe(&self) -> PathBuf { match &self.dev_engine { Some(_) => self.odian_dir().join("x64").join("MinGW-Release").join("Odian.exe"), @@ -265,20 +309,42 @@ impl StackConfig { self.dev_engine.is_some() && self.dev_target.has_web() } + /// What the web client's dev server should point at. + pub fn web_points(&self) -> WebPoints { + match &self.dhp { + Some(dhp) => WebPoints { + tiles: site_tiles_url(&self.site_url), + api: dhp.engine_url.clone(), + mcp: dhp.mcp_url.clone(), + }, + None => WebPoints { + tiles: format!("http://127.0.0.1:{TILES_PORT}"), + api: String::new(), + mcp: String::new(), + }, + } + } + /// Where to open the browser, when this run has a web client. /// /// `?api=` points it at THIS stack's API rather than its own `http://localhost:8080` /// default, and `?user=` is the operator - the same name the .exe runs as, swapped one /// included, so both clients author as the same person. The web's endpoint guard trusts /// any loopback port, so no change is needed on that side. + /// + /// A DHP-direct run carries NEITHER. The DHP is not a loopback host, so `?api=` naming it + /// would be refused by that same guard - quite rightly. Its address arrives as deployment + /// config instead (`/odian-config.js`, which the dev server serves from the environment), + /// and the operator is whoever signs in through the MCP. pub fn web_url(&self) -> Option { - self.runs_web().then(|| { - format!( + self.runs_web().then(|| match &self.dhp { + Some(_) => format!("http://localhost:{WEB_PORT}/"), + None => format!( "http://localhost:{}/?api={}&user={}", WEB_PORT, url_value(&format!("http://127.0.0.1:{API_PORT}")), url_value(&self.operator) - ) + ), }) } @@ -290,6 +356,11 @@ impl StackConfig { /// browser: not in the request line, not in Vite's log. Never log this address; /// `web_url` is the one to print. pub fn web_url_signed(&self, token: &str) -> Option { + // Nothing to sign for on a DHP-direct run: there is no local API to relay, and the web + // client gets its own token from the MCP when it signs in. + if self.dhp.is_some() { + return self.web_url(); + } self.web_url().map(|url| format!("{url}#token={}", url_value(token))) } @@ -400,7 +471,8 @@ type Shared = Arc>; pub struct RunningStack { job: job::Job, - pg: Pg, + /// None on a DHP-direct run: there is no local database to stop. + pg: Option, children: Vec<(Component, Shared)>, } @@ -440,7 +512,9 @@ impl RunningStack { } emit(StackEvent::new(component, ComponentState::Stopped)); } - let pg = self.pg.clone(); + let Some(pg) = self.pg.clone() else { + return; // DHP-direct: nothing local was started, so there is nothing to stop. + }; match run_blocking(move || pg.stop()).await { Ok(()) => emit(StackEvent::new(Component::Postgres, ComponentState::Stopped)), Err(message) => emit(StackEvent { component: Component::Postgres, state: ComponentState::Failed, message: Some(message) }), @@ -492,10 +566,10 @@ fn check_ports_free(own_db_running: bool, web: bool) -> Result<(), String> { } pub async fn start(http: &reqwest::Client, config: &StackConfig, emit: Emit<'_>) -> Result { - let pg = Pg::new(&config.layout, &config.pg_password); + let pg = config.dhp.is_none().then(|| Pg::new(&config.layout, &config.pg_password)); // Asks pg_ctl about this install's own data directory, so a database on the port that // belongs to another install still reads as someone else's. - check_ports_free(pg.running(), config.runs_web())?; + check_ports_free(pg.as_ref().is_some_and(Pg::running), config.runs_web())?; prepare(config)?; let mut running = RunningStack { job: job::Job::new()?, pg, children: Vec::new() }; match start_all(http, config, emit, &mut running).await { @@ -508,11 +582,31 @@ pub async fn start(http: &reqwest::Client, config: &StackConfig, emit: Emit<'_>) } async fn start_all(http: &reqwest::Client, config: &StackConfig, emit: Emit<'_>, running: &mut RunningStack) -> Result<(), String> { + if config.dhp.is_none() { + start_local_data_layer(http, config, emit, running).await?; + } + if config.runs_client() { + start_client(config, emit, running).await?; + } + if config.runs_web() { + start_web(http, config, emit, running).await?; + } + Ok(()) +} + +/// Postgres, the Engine API and the tile server: this PC's own data, and what a DHP-direct +/// run does without. +async fn start_local_data_layer( + http: &reqwest::Client, + config: &StackConfig, + emit: Emit<'_>, + running: &mut RunningStack, +) -> Result<(), String> { let layout = &config.layout; let state = layout.state_dir(); emit(StackEvent::new(Component::Postgres, ComponentState::Starting)); - let pg = running.pg.clone(); + let pg = running.pg.clone().ok_or("no database to start")?; run_blocking(move || pg.start()).await.map_err(|e| failed(emit, Component::Postgres, e))?; emit(StackEvent::new(Component::Postgres, ComponentState::Ready)); @@ -559,21 +653,13 @@ async fn start_all(http: &reqwest::Client, config: &StackConfig, emit: Emit<'_>, .await .map_err(|e| failed(emit, Component::Tiles, format!("The tile server {e}. See state\\tiles\\tile_server.log.")))?; emit(StackEvent::new(Component::Tiles, ComponentState::Ready)); - - if config.runs_client() { - start_client(config, emit, running).await?; - } - if config.runs_web() { - start_web(http, config, emit, running).await?; - } Ok(()) } /// Odian.exe, in its own folder of writable state, from the install or the checkout. async fn start_client(config: &StackConfig, emit: Emit<'_>, running: &mut RunningStack) -> Result<(), String> { - let state = config.layout.state_dir(); emit(StackEvent::new(Component::Odian, ComponentState::Starting)); - let client_dir = state.join("client"); + let client_dir = config.client_dir(); let odian_exe = config.odian_exe(); if config.dev_engine.is_some() && !odian_exe.is_file() { return Err(failed( @@ -615,9 +701,18 @@ async fn start_client(config: &StackConfig, emit: Emit<'_>, running: &mut Runnin /// a failed launch, and the bare `--` matters - without it npm keeps the rest for itself /// instead of passing it to Vite. `node_dir` goes first on its PATH: right after the /// launcher installed Node.js, this process's own PATH does not name it yet. -fn web_command(dir: &Path, node_dir: &Path) -> Command { +fn web_command(dir: &Path, node_dir: &Path, points: &WebPoints) -> Command { let mut web = Command::new("cmd"); web.env("PATH", crate::nodejs::path_with(node_dir)); + // Only on a DHP-direct run. `_WEB`'s dev server turns these into the deployment config it + // already understands (`/odian-config.js`); unset, it serves nothing and the ordinary + // local run is untouched. + if !points.api.is_empty() { + web.env("ODIAN_ENGINE_API_URL", &points.api); + } + if !points.mcp.is_empty() { + web.env("ODIAN_MCP_API_URL", &points.mcp); + } // --strictPort because without it Vite quietly takes the next free port, and the address // the launcher opens - and prints - would then be somebody else's server. web @@ -631,8 +726,9 @@ fn web_command(dir: &Path, node_dir: &Path) -> Command { .arg("--strictPort") // The map through THIS stack's tile server, as the .exe draws it: the site while it // answers, this PC's installed tiles when it does not. Without it _WEB's proxy goes - // to the public tile host, and an offline run has no map at all. - .env("ODIAN_TILE_SERVER_URL", format!("http://127.0.0.1:{TILES_PORT}")) + // to the public tile host, and an offline run has no map at all. A DHP-direct run has + // no tile server of its own, so it names the site's. + .env("ODIAN_TILE_SERVER_URL", points.tiles.clone()) .current_dir(dir); web } @@ -670,7 +766,7 @@ async fn start_web( format!("Node.js is not installed, and the web client runs on it. Install Node.js LTS (winget install {}), then launch again.", crate::nodejs::WINGET_ID), )); }; - let mut web = web_command(&dir, &node_dir); + let mut web = web_command(&dir, &node_dir, &config.web_points()); give_console(&mut web); let child = running.spawn(Component::Web, &mut web).map_err(|e| failed(emit, Component::Web, e))?; // A cold start compiles Cesium, so this is patient where the others are not. @@ -756,6 +852,12 @@ async fn run_blocking(work: impl FnOnce() -> Result Result<(), String> { + if let Some(dhp) = &config.dhp { + for dir in [dhp.cache_dir.join("logs"), dhp.cache_dir.join("tile_cache"), dhp.cache_dir.join("heightmap")] { + std::fs::create_dir_all(&dir).map_err(|e| format!("cannot create {}: {e}", dir.display()))?; + } + return Ok(()); + } let layout = &config.layout; let state = layout.state_dir(); let data = layout.data_dir(); @@ -1019,7 +1121,58 @@ fn tiles_env(config: &StackConfig) -> Vec<(&'static str, String)> { env } +/// A run with no local stack at all: everything the client talks to is the DHP's. +/// +/// Deliberately WITHOUT `ODIAN_LAUNCH_USER` and `ODIAN_MINT_SECRET`. Those two are what make +/// the client mint its own session, and only a local API will honour that - the cluster does +/// not share the secret. Left out, the client does what the shipped .exe does: signs in +/// through the MCP broker and carries the cluster's own token. +fn dhp_client_env(config: &StackConfig, dhp: &DhpDirect) -> Vec<(&'static str, String)> { + let client = config.client_dir(); + let tiles = site_tiles_url(&config.site_url); + let mut env = vec![ + ("ODIAN_ENGINE_API_URL", dhp.engine_url.clone()), + // The broker the client signs in through. Without it its login screen has nowhere to go + // and the run is a window that cannot be used. + ("ODIAN_MCP_API_URL", dhp.mcp_url.clone()), + ("ODIAN_TILE_SERVER_URL", tiles.clone()), + ("ODIAN_POP_SERVICE_URL", tiles.clone()), + ("ODIAN_TILE_PROVIDER", "odian".to_string()), + ("ODIAN_TILE_REQUEST_MODE", "xyz".to_string()), + ("ODIAN_TILE_Y_SCHEME", "xyz".to_string()), + ("ODIAN_TILE_AUTH_MODE", "none".to_string()), + ("ODIAN_TILE_CACHE_DIR", text(client.join("tile_cache"))), + ("ODIAN_HEIGHT_CACHE_DIR", text(client.join("heightmap"))), + ("ODIAN_LIDAR_ENABLED", "0".to_string()), + ]; + // Every set the DHP can draw, not this PC's - it has none. Same order of preference as a + // local run, so the map opens on the same basemap a developer is used to. + let sets = &config.site_tile_sets; + let basemap = ["dark_v2", "dark"] + .iter() + .find_map(|want| sets.iter().find(|set| set.style == *want)) + .or_else(|| sets.iter().find(|set| set.style != "heightmap")); + if let Some(set) = basemap { + env.push(("ODIAN_TILE_STYLE", set.style.clone())); + env.push(("ODIAN_TILE_DATASET", set.dataset.clone())); + } + let styles: Vec<&str> = sets.iter().map(|set| set.style.as_str()).collect(); + if !styles.is_empty() { + env.push(("ODIAN_TILE_STYLES", styles.join(","))); + } + if let Some(set) = sets.iter().find(|set| set.style == "heightmap") { + env.push(("ODIAN_HEIGHT_SERVER_URL", tiles)); + env.push(("ODIAN_HEIGHT_FORMAT", "lerc".to_string())); + env.push(("ODIAN_HEIGHT_STYLE", set.style.clone())); + env.push(("ODIAN_HEIGHT_DATASET", set.dataset.clone())); + } + env +} + fn client_env(config: &StackConfig) -> Vec<(&'static str, String)> { + if let Some(dhp) = &config.dhp { + return dhp_client_env(config, dhp); + } let client = config.layout.state_dir().join("client"); let tiles_url = format!("http://127.0.0.1:{TILES_PORT}"); let mut env = vec![ @@ -1184,6 +1337,7 @@ mod tests { dev_engine: None, dev_user: None, dev_target: DevTarget::default(), + dhp: None, site_url: "https://dhp.example/dhp".to_string(), site_tile_sets: tile_sets .iter() @@ -1268,6 +1422,71 @@ mod tests { assert!(value(&env, "ODIAN_HEIGHT_SERVER_URL").is_none()); } + /// What an ordinary local web run points at, for the tests that do not care about the DHP. + fn local_points() -> WebPoints { + WebPoints { tiles: format!("http://127.0.0.1:{TILES_PORT}"), api: String::new(), mcp: String::new() } + } + + #[test] + fn a_dhp_direct_web_run_is_told_where_to_look_and_asks_for_nothing_local() { + let mut config = config(&[]); + config.dev_engine = Some(PathBuf::from(r"D:\dev\ODIAN_Engine")); + config.dev_target = DevTarget::Web; + config.dhp = Some(DhpDirect { + engine_url: "https://dhp.example/engine".to_string(), + mcp_url: "https://dhp.example".to_string(), + cache_dir: PathBuf::from(r"D:\ODIAN\state\devclient"), + }); + let points = config.web_points(); + assert_eq!(points.api, "https://dhp.example/engine"); + assert_eq!(points.mcp, "https://dhp.example"); + assert_eq!(points.tiles, "https://dhp.example/dhp/tileserver"); + // The URL must NOT carry ?api=: the DHP is not a loopback host, so _WEB's endpoint + // guard would refuse it and quietly fall back to its own localhost default. + let url = config.web_url().expect("a web run has a URL"); + assert!(!url.contains("api="), "the address must not try to override the endpoint: {url}"); + assert!(!url.contains("user="), "nobody is signed in yet: {url}"); + // And no token to staple on, since there is no local API relaying anything. + assert_eq!(config.web_url_signed("tok"), Some(url)); + } + + #[test] + fn an_ordinary_web_run_still_points_at_this_pc() { + let mut config = config(&[]); + config.dev_engine = Some(PathBuf::from(r"D:\dev\ODIAN_Engine")); + config.dev_target = DevTarget::Web; + let points = config.web_points(); + assert!(points.api.is_empty() && points.mcp.is_empty(), "nothing injected for a local run"); + assert!(points.tiles.contains("127.0.0.1")); + let url = config.web_url().expect("a web run has a URL"); + assert!(url.contains(&format!("api=http%3A%2F%2F127.0.0.1%3A{API_PORT}")) || url.contains("127.0.0.1"), "{url}"); + assert!(config.web_url_signed("tok").is_some_and(|u| u.contains("#token=tok"))); + } + + #[test] + fn a_dhp_direct_client_is_pointed_away_from_this_pc() { + let mut config = config(&[]); + config.dev_engine = Some(PathBuf::from(r"D:\dev\ODIAN_Engine")); + config.dhp = Some(DhpDirect { + engine_url: "https://dhp.example/engine".to_string(), + mcp_url: "https://dhp.example".to_string(), + cache_dir: PathBuf::from(r"D:\ODIAN\state\devclient"), + }); + let env = client_env(&config); + assert_eq!(value(&env, "ODIAN_ENGINE_API_URL"), Some("https://dhp.example/engine")); + // The broker it signs in through: without this its login screen has nowhere to go. + assert_eq!(value(&env, "ODIAN_MCP_API_URL"), Some("https://dhp.example")); + assert_eq!(value(&env, "ODIAN_TILE_SERVER_URL"), Some("https://dhp.example/dhp/tileserver")); + // These two are what make the client mint its own session, which only a LOCAL API would + // honour. Present here, the run would fail to sign in against the cluster. + assert_eq!(value(&env, "ODIAN_LAUNCH_USER"), None); + assert_eq!(value(&env, "ODIAN_MINT_SECRET"), None); + // And nothing may point back at this PC: there is no local stack listening. + for (key, val) in &env { + assert!(!val.contains("127.0.0.1"), "{key} still points at this PC: {val}"); + } + } + #[test] fn api_and_tile_server_are_loopback_and_cache_only() { let config = config(&[("dark", "protomaps_20260423")]); @@ -1412,7 +1631,7 @@ mod tests { // Checked as ARGUMENTS rather than by reading the binary: these are short literals that // a release build merges away, so "is the flag in the .exe" answers nothing. A wrong // flag here would surface only as a failed launch. - let cmd = web_command(Path::new(r"E:\dev\ODIAN_Engine\_WEB"), Path::new(r"C:\Program Files\nodejs")); + let cmd = web_command(Path::new(r"E:\dev\ODIAN_Engine\_WEB"), Path::new(r"C:\Program Files\nodejs"), &local_points()); let args: Vec = cmd.get_args().map(|a| a.to_string_lossy().into_owned()).collect(); assert_eq!(args, ["/c", "npm", "run", "dev", "--", "--port", "5173", "--strictPort"]); // The bare `--` is load-bearing: without it npm eats the flags instead of passing them on. @@ -1429,7 +1648,7 @@ mod tests { fn the_web_draws_its_map_from_this_stacks_tile_server() { // Offline, the public tile host is unreachable; this stack's tile server still has // the PC's installed tiles. _WEB's vite.config.ts reads this variable. - let cmd = web_command(Path::new(r"E:\dev\ODIAN_Engine\_WEB"), Path::new(r"C:\Program Files\nodejs")); + let cmd = web_command(Path::new(r"E:\dev\ODIAN_Engine\_WEB"), Path::new(r"C:\Program Files\nodejs"), &local_points()); let tiles = cmd .get_envs() .find(|(key, _)| *key == "ODIAN_TILE_SERVER_URL") @@ -1443,7 +1662,7 @@ mod tests { // Right after the launcher installs Node.js, its own PATH does not name it yet; npm // runs with the found folder first, so the launch goes on without a restart. let node = Path::new(r"C:\Program Files\nodejs"); - let cmd = web_command(Path::new(r"E:\dev\ODIAN_Engine\_WEB"), node); + let cmd = web_command(Path::new(r"E:\dev\ODIAN_Engine\_WEB"), node, &local_points()); let path = cmd .get_envs() .find(|(key, _)| *key == "PATH") diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index e431079..6697bfc 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "productName": "ODIAN Launcher", - "version": "0.1.39", + "version": "0.1.40", "identifier": "fr.odian.launcher", "build": { "frontendDist": "../dist", diff --git a/src/components/ActionPanel.svelte b/src/components/ActionPanel.svelte index bd82a09..27f68b6 100644 --- a/src/components/ActionPanel.svelte +++ b/src/components/ActionPanel.svelte @@ -209,6 +209,14 @@

ODIAN {s?.available} from {site}, into {s?.install_dir}.

+ + {#if s?.dhp_blocked} +

+ Dev mode: a run straight against {site} needs no install, but {s.dhp_blocked} +

+ {/if} {@render driveLink("Have an ODIAN drive?")} {:else if action === "offline_unavailable"} {@render primary("Connect to your DHP to install", "globe", () => {}, true)} @@ -229,6 +237,14 @@

{#if checking} Checking {site}… + {:else if !s?.installed} + Nothing is installed here: the client comes from your checkout and runs on + {site}'s data. You sign in inside ODIAN, not here. + {:else if s?.update_required} + + ODIAN {s.installed} is installed, {s.available} is on {site}. A dev run starts + your checkout, so it does not need it. + {:else if s?.online} ODIAN {s.installed} is up to date. {:else} diff --git a/src/lib/launcher.svelte.ts b/src/lib/launcher.svelte.ts index 7ca6eff..25cb79a 100644 --- a/src/lib/launcher.svelte.ts +++ b/src/lib/launcher.svelte.ts @@ -72,10 +72,16 @@ export function deriveAction(s: Status | null): ActionKind { } // idle or checking if (s.installed === null) { + // Nothing installed, but a dev checkout and a reachable DHP are enough on their own: + // the client runs against the DHP and signs itself in, so neither an install nor a + // launcher sign-in stands in the way. + if (s.dhp_direct) return "launch"; if (!s.online) return "offline_unavailable"; return s.signed_in ? "install" : "sign_in"; } - if (s.update_required) return s.signed_in ? "update" : "sign_in"; + // A dev run starts the checkout, so a newer pack is worth saying but not worth + // stopping for; the hub keeps Launch and mentions the update beside it. + if (s.update_required && !s.dev_run) return s.signed_in ? "update" : "sign_in"; // Launching runs ODIAN as the remembered operator; after Sign out there is none. if (s.operator === null) return s.online ? "sign_in" : "signed_out_offline"; return "launch"; diff --git a/src/lib/mock.ts b/src/lib/mock.ts index 546277a..2d13722 100644 --- a/src/lib/mock.ts +++ b/src/lib/mock.ts @@ -226,7 +226,8 @@ function derive(s: Status): Status { available, signed_in: s.online && s.signed_in, update_required, - can_launch: s.installed !== null && !update_required && s.phase === "idle", + // A dev run launches the checkout, so an available pack does not hold it back. + can_launch: (s.installed !== null || s.dhp_direct) && (!update_required || s.dev_run) && s.phase === "idle", }; } @@ -240,6 +241,9 @@ function initialStatus(scenario: MockScenario): Status { available: CURRENT, update_required: false, can_launch: false, + dev_run: false, + dhp_direct: false, + dhp_blocked: null, phase: "idle", error: null, install_dir: DEFAULT_DIR, @@ -285,9 +289,25 @@ function initialStatus(scenario: MockScenario): Status { // A licensed PC, already set up to run from a checkout, so the Dev section and the // dev-run marker can be seen without a licence file. Object.assign(s, { - installed: CURRENT, + // Deliberately BEHIND what the DHP has: this is the case that used to refuse to + // launch at all, so the scenario should show it working. + installed: "0.71.0", operator: OPERATOR, signed_in: true, + dev_run: true, + dev: { machine: "ODIAN-DEV-01", install_id: null, expires_at: "2027-01-31", note: "test kit" }, + }); + break; + case "dev-dhp": + // A licensed dev PC with NOTHING installed, on a reachable DHP: the case that used to + // offer only Install. + Object.assign(s, { + installed: null, + operator: OPERATOR, + signed_in: true, + dev_run: true, + dhp_direct: true, + dhp_blocked: null, dev: { machine: "ODIAN-DEV-01", install_id: null, expires_at: "2027-01-31", note: "test kit" }, }); break; @@ -349,7 +369,7 @@ class MockBackend implements Backend { this.settings = { site_url: SITE_URL, mcp_url: MCP_URL, ai_url: "", install_dir: DEFAULT_DIR, dev_root: "", dev_mode: false, dev_user: "", dev_build: false, dev_target: "client" }; // Already pointed at a checkout and switched on, so the dev controls and the dev-run // marker show as they do on the real thing. - if (scenario === "dev") Object.assign(this.settings, { dev_root: "E:" + String.fromCharCode(92) + "ODIAN_Dev", dev_mode: true }); + if (scenario === "dev" || scenario === "dev-dhp") Object.assign(this.settings, { dev_root: "E:" + String.fromCharCode(92) + "ODIAN_Dev", dev_mode: true }); if (this.status.installed) { // An installed mock PC has the basemap, Dark V2 and a stopped satellite download. for (const item of MOCK_MARKET) if (item.required) this.marketPresent.set(item.key, "installed"); diff --git a/src/lib/types.ts b/src/lib/types.ts index f72d773..ad7dfd6 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -36,6 +36,12 @@ export interface Status { update_required: boolean; /** installed && !update_required && phase is idle. */ can_launch: boolean; + /** This launch would come from the dev checkout, so an available pack does not gate it. */ + dev_run: boolean; + /** Nothing is installed, but a dev run can still start the client against the DHP. */ + dhp_direct: boolean; + /** On a licensed PC with nothing installed, why a DHP run is not on offer. */ + dhp_blocked: string | null; phase: Phase; /** Last error, human readable. */ error: string | null; @@ -331,6 +337,7 @@ export const MOCK_SCENARIOS = [ "sync-conflicts", "error", "dev", + "dev-dhp", ] as const; export type MockScenario = (typeof MOCK_SCENARIOS)[number]; From a1cc4e086dfb569d60076e474128e894690c5dd3 Mon Sep 17 00:00:00 2001 From: JIMMY_JFEXP <108483685+Kelorastus@users.noreply.github.com> Date: Wed, 30 Sep 2026 15:49:53 +0200 Subject: [PATCH 09/16] Marketplace Finish: repair sets whose marker says complete but files are missing "2 chosen maps are only partly downloaded (Population density, Yandex satellite imagery). Finish" - and Finish did nothing, silently. Root cause: the banner and the button asked two different questions. market::unfinished counts a set as unfinished when check_installed's file count found it short (launcher.log: "popdark says it is installed but holds 293056 of 400268 files", "yandex ... 2371 of 28213"). Finish went through apply_market, whose market::to_add only reads the markers - .blocks-done.json listing every block - so it found nothing to add, nothing to remove, and returned Ok. And even a forced install could not have repaired it: the installer skips every block the marker lists (install.rs `pending`). - odian-packs: InstallOptions::recheck_tile_sets. For those sets install_tiles counts the tiles on disk per block (tiles_on_disk_per_block: z/x/y.ext names only, so .blocks-done.json and the tile server's .missing negatives never count), takes off `done` every block holding fewer than the index names (forget_short_blocks - more is still whole: a PC bakes its own tiles in), rewrites the marker at once so a stopped run reads as partial, and fetches just those blocks; finish_block's rename replaces what is there. The drive-copy path skips its "recorded complete" shortcut for them too. - launcher: Finish passes market::short_tile_sets(market_checked) through Inner::market_recheck (taken by install_market_items), apply_market runs when a re-check is all there is to do, and the log says which sets are repaired. Counted, not hashed: the index names a block's tiles only by digest, so a block whose lost tiles were replaced by as many baked ones reads whole. Spot-check: odian-packs install::tests (a short block is dropped, a whole one and one with extra baked tiles kept, markers not counted); launcher market::tests::finish_repairs_the_sets_a_count_found_short with the counts from the real log. --- crates/odian-packs/src/install.rs | 124 ++++++++++++++++++++++++++++-- src-tauri/src/launcher.rs | 53 ++++++++++--- src-tauri/src/market.rs | 26 +++++++ 3 files changed, 188 insertions(+), 15 deletions(-) diff --git a/crates/odian-packs/src/install.rs b/crates/odian-packs/src/install.rs index ae1c8cd..991f16f 100644 --- a/crates/odian-packs/src/install.rs +++ b/crates/odian-packs/src/install.rs @@ -36,11 +36,25 @@ pub struct InstallOptions { pub tile_sets: Option>, /// The source files to install, by manifest path; `None` is all of them. pub src_paths: Option>, + /// Tile sets (`style/dataset`) whose `.blocks-done.json` is NOT to be taken at its word: + /// each block it lists is counted on disk first, and one holding fewer tiles than the + /// index names is fetched again. For a set a count has already found short - its marker + /// says every block landed, the folder says otherwise (tiles deleted by hand, a disk + /// cleaner, a copy that lost files) - which without this no install could ever repair, + /// since the marker is exactly what an install skips on. + pub recheck_tile_sets: BTreeSet, } impl Default for InstallOptions { fn default() -> Self { - InstallOptions { workers: 6, only: vec![Stage::App, Stage::Db, Stage::Src, Stage::Tiles], db_paths: None, tile_sets: None, src_paths: None } + InstallOptions { + workers: 6, + only: vec![Stage::App, Stage::Db, Stage::Src, Stage::Tiles], + db_paths: None, + tile_sets: None, + src_paths: None, + recheck_tile_sets: BTreeSet::new(), + } } } @@ -179,7 +193,7 @@ where stage_index += 1; let keep = |s: &&TileSet| opts.tile_sets.as_ref().is_none_or(|sets| sets.contains(&format!("{}/{}", s.style, s.dataset))); let tiles = TilesSection { sets: tiles.sets.iter().filter(keep).cloned().collect(), ..tiles.clone() }; - summary.tiles = Some(install_tiles(&ctx, stage_index, &version, &tiles, &data_dir).await?); + summary.tiles = Some(install_tiles(&ctx, stage_index, &version, &tiles, &data_dir, &opts.recheck_tile_sets).await?); } check_cancel()?; @@ -603,6 +617,7 @@ async fn copy_install_tiles( tiles: &TilesSection, root: &Path, data_dir: &Path, + recheck: &BTreeSet, ) -> Result> { let total: u64 = tiles.sets.iter().map(|s| s.bytes).sum(); let files: u64 = tiles.sets.iter().map(|s| s.files).sum(); @@ -615,8 +630,10 @@ async fn copy_install_tiles( // This PC already recorded the very same set as complete: `.blocks-done.json` names // this index and all of its blocks, the record the marketplace itself reads to say // "Installed". Hashing its hundreds of thousands of files to learn what the marker - // already states costs minutes a set and can only ever conclude "identical". - if set_recorded_complete(&to, set) { + // already states costs minutes a set and can only ever conclude "identical" - unless + // the caller has counted the set short, when the copy below (which leaves identical + // files alone) is the repair. + if set_recorded_complete(&to, set) && !recheck.contains(&format!("{style}/{dataset}")) { ctx.reporter.begin_sub(format!("tiles {style}/{dataset}"), "files", set.files); ctx.reporter.items_done(set.files); ctx.reporter.add_done_bytes(set.bytes); @@ -753,10 +770,59 @@ fn copy_checked(from: &Path, to: &Path, reporter: &Reporter, cancel: &Cancellati Ok((size, true)) } -async fn install_tiles(ctx: &Ctx<'_>, stage_index: u32, version: &str, tiles: &TilesSection, data_dir: &Path) -> Result> { +/// How many tiles `set_dir` holds, per block. Only names the installer itself would write +/// count (`z/x/y.ext`, `parse_tile_name`'s rule), so the markers beside them - its own +/// `.blocks-done.json`, the tile server's `.missing` negatives - never pass for tiles. +fn tiles_on_disk_per_block(set_dir: &Path) -> HashMap<(u64, u64, u64), u64> { + let mut counts = HashMap::new(); + let Ok(zooms) = std::fs::read_dir(set_dir) else { return counts }; + for zoom in zooms.flatten() { + let Ok(columns) = std::fs::read_dir(zoom.path()) else { continue }; + let z = zoom.file_name().to_string_lossy().into_owned(); + for column in columns.flatten() { + let Ok(rows) = std::fs::read_dir(column.path()) else { continue }; + let x = column.file_name().to_string_lossy().into_owned(); + for row in rows.flatten() { + if !row.file_type().is_ok_and(|kind| kind.is_file()) { + continue; + } + let name = format!("{z}/{x}/{}", row.file_name().to_string_lossy()); + if let Some((z, x, y, _)) = crate::tiles::parse_tile_name(&name) { + *counts.entry(crate::tiles::block_of(z, x, y)).or_default() += 1; + } + } + } + } + counts +} + +/// Take off `done` every block the disk holds fewer tiles of than the index names, and say +/// how many. A block holding MORE is whole: a PC bakes tiles of its own into the same folders. +/// Counted, not hashed - the index names a block's tiles only through their digest - so a +/// block whose missing tiles were replaced by as many baked ones reads whole; what a count +/// cannot see, a hash of every tile of the set could, at minutes a set. +fn forget_short_blocks(done: &mut BTreeSet, blocks: &[IndexBlock], on_disk: &HashMap<(u64, u64, u64), u64>) -> usize { + let mut dropped = 0; + for block in blocks { + let held = on_disk.get(&(block.z, block.bx, block.by)).copied().unwrap_or(0); + if held < block.files && done.remove(&block.done_key()) { + dropped += 1; + } + } + dropped +} + +async fn install_tiles( + ctx: &Ctx<'_>, + stage_index: u32, + version: &str, + tiles: &TilesSection, + data_dir: &Path, + recheck: &BTreeSet, +) -> Result> { if let Some(root) = ctx.backend.install_root() { let root = root.to_path_buf(); - return copy_install_tiles(ctx, stage_index, tiles, &root, data_dir).await; + return copy_install_tiles(ctx, stage_index, tiles, &root, data_dir, recheck).await; } let total: u64 = tiles.sets.iter().map(|s| s.bytes).sum(); let blocks: u64 = tiles.sets.iter().map(|s| s.blocks).sum(); @@ -787,6 +853,16 @@ async fn install_tiles(ctx: &Ctx<'_>, stage_index: u32, version: &str, tiles: &T done.extend(list.iter().filter_map(Value::as_str).map(str::to_string)); } } + if !done.is_empty() && recheck.contains(&format!("{style}/{dataset}")) { + ctx.reporter.begin_sub(format!("tiles {style}/{dataset}: counting what is on disk"), "", 0); + let dir = set_dir.clone(); + let on_disk = blocking(move || Ok(tiles_on_disk_per_block(&dir))).await?; + if forget_short_blocks(&mut done, &index.blocks, &on_disk) > 0 { + // Written now, not when the blocks land: a run stopped before then must leave + // a set that reads as partial, so the next one resumes instead of trusting it. + atomic_write(&done_path, blocks_done_json(&set.index_sha256, &done).as_bytes())?; + } + } let pending: Vec = index.blocks.iter().filter(|b| !done.contains(&b.done_key())).cloned().collect(); ctx.reporter.begin_sub(format!("tiles {style}/{dataset}"), "blocks", index.blocks.len() as u64); let skipped_bytes: u64 = index.blocks.iter().filter(|b| done.contains(&b.done_key())).map(|b| b.bytes).sum(); @@ -854,6 +930,42 @@ async fn install_tiles(ctx: &Ctx<'_>, stage_index: u32, version: &str, tiles: &T mod tests { use super::*; + fn block(z: u64, bx: u64, by: u64, files: u64, digest: &str) -> IndexBlock { + IndexBlock { z, bx, by, files, bytes: files * 10, digest: digest.to_string() } + } + + #[test] + fn a_block_the_disk_holds_short_of_is_fetched_again() { + let dir = std::env::temp_dir().join(format!("odian-recheck-{}", crate::copy::unique_hex())); + // Block (8, 2, 1) is x 128..=191, y 64..=127: two of its three tiles are here, plus a + // tile server negative and the installer's marker, neither of which is a tile. + // Block (8, 0, 0) has its one tile and one this PC baked itself: more is still whole. + for rel in ["8/128/64.png", "8/129/64.png", "8/129/65.png.missing", "8/1/1.png", "8/2/2.png"] { + let path = dir.join(rel); + std::fs::create_dir_all(path.parent().unwrap()).unwrap(); + std::fs::write(&path, b"t").unwrap(); + } + std::fs::write(dir.join(DONE_MARKER), b"{}").unwrap(); + + let on_disk = tiles_on_disk_per_block(&dir); + assert_eq!(on_disk.get(&(8, 2, 1)), Some(&2)); + assert_eq!(on_disk.get(&(8, 0, 0)), Some(&2)); + + let blocks = [block(8, 2, 1, 3, "aa"), block(8, 0, 0, 1, "bb"), block(9, 0, 0, 4, "cc")]; + let mut done: BTreeSet = blocks.iter().map(IndexBlock::done_key).collect(); + // The short block and the one with nothing on disk go; the whole one stays. + assert_eq!(forget_short_blocks(&mut done, &blocks, &on_disk), 2); + assert_eq!(done, ["8/0/0:bb".to_string()].into_iter().collect::>()); + // A block that was never marked done is not "forgotten": it was already pending. + assert_eq!(forget_short_blocks(&mut done, &blocks, &on_disk), 0); + std::fs::remove_dir_all(&dir).unwrap(); + } + + #[test] + fn an_empty_or_missing_folder_counts_nothing() { + assert!(tiles_on_disk_per_block(Path::new(r"Z:\no\such\set")).is_empty()); + } + #[test] fn progress_files_match_python_json_dumps() { let verified: BTreeSet = [2, 0, 1].into_iter().collect(); diff --git a/src-tauri/src/launcher.rs b/src-tauri/src/launcher.rs index 1617356..ae7f42d 100644 --- a/src-tauri/src/launcher.rs +++ b/src-tauri/src/launcher.rs @@ -190,6 +190,10 @@ struct Inner { dev_refusal: Option, /// What the last count found on disk, kept for as long as nothing can have changed it. market_checked: Option>, + /// Tile sets (`style/dataset`) the next marketplace download re-counts block by block + /// instead of trusting their markers: the ones `market_checked` found short, handed over by + /// Finish and taken by `install_market_items`. + market_recheck: BTreeSet, /// Read once at start: this launcher ships on an ODIAN drive (`settings::portable_root`). portable: bool, /// A newer launcher is being checked for or downloaded (see `update_self`): nothing may @@ -444,7 +448,7 @@ impl Launcher { .map_err(|e| format!("cannot start the HTTP client: {e}"))?; Ok(Launcher { http, - inner: Mutex::new(Inner { settings, state, online: false, available: None, token, phase: Phase::Checking, error: None, sync: None, engine_url, live: None, map_from_site: None, map_problem: None, tiles_waiting: None, unfinished: None, dev: None, dev_refusal: None, market_checked: None, portable: crate::settings::portable_drive().is_some(), updating_self: false, offline_reason: None, drive_extras: None }), + inner: Mutex::new(Inner { settings, state, online: false, available: None, token, phase: Phase::Checking, error: None, sync: None, engine_url, live: None, map_from_site: None, map_problem: None, tiles_waiting: None, unfinished: None, dev: None, dev_refusal: None, market_checked: None, market_recheck: BTreeSet::new(), portable: crate::settings::portable_drive().is_some(), updating_self: false, offline_reason: None, drive_extras: None }), stack: Mutex::new(None), stack_states: std::sync::Mutex::new(Vec::new()), sign_in_cancel: Notify::new(), @@ -818,11 +822,19 @@ impl Launcher { /// Download what was chosen and never fully arrived, without changing the choice and /// without removing anything: the selection it applies is everything this PC holds or /// asked for, so `apply_market` finds nothing to delete and only fills the gaps. + /// + /// "Never fully arrived" is also a set whose marker says every block landed while the count + /// found files missing: the hub counts those as unfinished (`market::unfinished`), so Finish + /// must fetch them too. They go down as sets to re-count block by block - the installer + /// skips on that very marker, and without this Finish found nothing to add and did nothing. pub async fn finish_market(&self, app: &AppHandle) -> Result<(), String> { let (manifest, _, install_dir) = self.market_manifest(app).await?; - let extras = self.inner.lock().await.state.extras.clone().unwrap_or_default(); + let (extras, short) = { + let inner = self.inner.lock().await; + (inner.state.extras.clone().unwrap_or_default(), market::short_tile_sets(inner.market_checked.as_deref().unwrap_or_default())) + }; let keep = market::held_keys(&manifest, &install_dir.join("data"), &extras); - self.apply_market(app, keep.into_iter().collect()).await + self.apply_market_rechecking(app, keep.into_iter().collect(), short).await } /// Ask the site what it has baked since this PC last looked. Quiet on failure: a site @@ -1583,6 +1595,11 @@ impl Launcher { } pub async fn apply_market(&self, app: &AppHandle, selected: Vec) -> Result<(), String> { + self.apply_market_rechecking(app, selected, BTreeSet::new()).await + } + + /// `apply_market`, also repairing `recheck` (`style/dataset`): sets counted short on disk. + async fn apply_market_rechecking(&self, app: &AppHandle, selected: Vec, recheck: BTreeSet) -> Result<(), String> { let (manifest, installed, install_dir) = self.market_manifest(app).await?; let extras = market::optional_keys(&manifest, selected); { @@ -1598,13 +1615,17 @@ impl Launcher { } let data = install_dir.join("data"); let adds = market::to_add(&manifest, &data, &extras); - if !installed || (adds.is_empty() && market::to_remove(&manifest, &data, &extras).is_empty()) { + // Only a set still chosen and still in this version is worth re-counting. + let (wanted, _) = market::install_filter(&manifest, &extras, true); + let recheck: BTreeSet = recheck.into_iter().filter(|set| wanted.contains(set)).collect(); + if !installed || (adds.is_empty() && recheck.is_empty() && market::to_remove(&manifest, &data, &extras).is_empty()) { self.emit(app).await; return Ok(()); } - if !adds.is_empty() && !self.inner.lock().await.online { + if (!adds.is_empty() || !recheck.is_empty()) && !self.inner.lock().await.online { return Err("Your DHP is unreachable: connect to download marketplace items.".to_string()); } + self.inner.lock().await.market_recheck = recheck; self.start_run(app, None, true).await } @@ -1675,21 +1696,35 @@ impl Launcher { install_dir: &Path, cancel: &CancellationToken, ) -> Result { - let (installed, extras) = { - let inner = self.inner.lock().await; - (inner.state.installed_version.clone(), inner.state.extras.clone().unwrap_or_default()) + let (installed, extras, recheck) = { + let mut inner = self.inner.lock().await; + // Taken, not read: a later marketplace download re-counts only if Finish asks again. + (inner.state.installed_version.clone(), inner.state.extras.clone().unwrap_or_default(), std::mem::take(&mut inner.market_recheck)) }; let installed = installed.ok_or_else(|| "ODIAN is not installed.".to_string())?; let verified = odian_packs::version_manifest(source, &installed, odian_packs::bundled_public_key()).await?; let manifest = verified.manifest(); let titles: Vec = market::to_add(manifest, &install_dir.join("data"), &extras).into_iter().map(|item| item.title).collect(); - self.log(app, "info", format!("Downloading {}", titles.join(", "))); + if !titles.is_empty() { + self.log(app, "info", format!("Downloading {}", titles.join(", "))); + } + if !recheck.is_empty() { + self.log( + app, + "info", + format!( + "Fetching what is missing on disk from {} (their markers say complete; the count says otherwise).", + recheck.iter().cloned().collect::>().join(", ") + ), + ); + } let (tile_sets, src_paths) = market::install_filter(manifest, &extras, true); let options = InstallOptions { only: vec![Stage::Src, Stage::Tiles], tile_sets: Some(tile_sets), src_paths: Some(src_paths), + recheck_tile_sets: recheck, ..InstallOptions::default() }; let progress = { diff --git a/src-tauri/src/market.rs b/src-tauri/src/market.rs index 1045828..e76263e 100644 --- a/src-tauri/src/market.rs +++ b/src-tauri/src/market.rs @@ -337,6 +337,17 @@ pub fn unfinished( .collect() } +/// The tile sets a count found short, as the installer names them (`style/dataset`): what +/// Finish hands it to re-count block by block, because their markers say they are whole. +pub fn short_tile_sets(checked: &[Check]) -> BTreeSet { + checked + .iter() + .filter(|check| !check.whole) + .filter_map(|check| check.key.strip_prefix("tiles:")) + .map(str::to_string) + .collect() +} + /// Whether the chosen optional items still need downloading. pub fn to_add(manifest: &Manifest, data_dir: &Path, extras: &BTreeSet) -> Vec { items(manifest, data_dir, extras) @@ -389,6 +400,21 @@ pub fn remove_counting( mod tests { use super::*; + #[test] + fn finish_repairs_the_sets_a_count_found_short() { + // What the log said on a real PC: two markers claiming "installed" over missing files. + let check = |key: &str, found, expected| Check { key: key.to_string(), found, expected, whole: found >= expected }; + let checked = [ + check("tiles:popdark/protomaps_20260423", 293_056, 400_268), + check("tiles:yandex/protomaps_20260423", 2_371, 28_213), + check("tiles:dark_v2/protomaps_20260423", 95_000, 90_501), + ]; + let short: Vec = short_tile_sets(&checked).into_iter().collect(); + // In the installer's own spelling, and a set holding MORE than it names is not short. + assert_eq!(short, ["popdark/protomaps_20260423", "yandex/protomaps_20260423"]); + assert!(short_tile_sets(&[]).is_empty()); + } + fn manifest() -> Manifest { serde_json::from_value(serde_json::json!({ "schema": 1, "product": "odian", "version": "0.61.0", "released_at": "2026-09-22T12:00:00Z", From e28101ada5a06a1cda76b7790834438a2d2dcd3c Mon Sep 17 00:00:00 2001 From: Kelorastus <108483685+Kelorastus@users.noreply.github.com> Date: Wed, 30 Sep 2026 16:02:30 +0200 Subject: [PATCH 10/16] fix --- src-tauri/src/release.rs | 14 +++++++++++--- src-tauri/tauri.conf.json | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src-tauri/src/release.rs b/src-tauri/src/release.rs index 5bab2f4..3c3fe78 100644 --- a/src-tauri/src/release.rs +++ b/src-tauri/src/release.rs @@ -298,14 +298,22 @@ pub fn run_release( // It ships with the release skill rather than the repo, so look there when the repo // has no copy. A missing script used to fail the same way a broken one does. let api = api_script(&scripts).ok_or( - "deploy-api.ps1 is neither in the repo's scripts nor in the release skill: the API cannot be rolled.", + format!( + "deploy-api.ps1 is not in {}. Pull ODIAN_MCP_Server on this PC, or untick the Engine API.", + scripts.display() + ), )?; body.push_str(&format!( "Write-Host '=== Engine API ===' -ForegroundColor Cyan - & '{}' -NodeSudoPw $pw + & '{}' -NodeSudoPw $pw -EngineRoot '{}' if ($LASTEXITCODE -notin 0,3) {{ throw 'the API step failed' }} ", - api.display() + api.display(), + // The checkout is the sibling of ODIAN_MCP_Server, which is what `mcp_repo` names. + // Passed explicitly so the script does not have to guess from where it was loaded - + // it can come from the repo or from the release skill, and only one of those is a + // sibling of the Engine. + mcp_repo.parent().unwrap_or(mcp_repo).join("ODIAN_Engine").display() )); } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 6697bfc..519342d 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "productName": "ODIAN Launcher", - "version": "0.1.40", + "version": "0.1.41", "identifier": "fr.odian.launcher", "build": { "frontendDist": "../dist", From 064c1b9098f3f3d636b67782d7ed33d9f8ead8e5 Mon Sep 17 00:00:00 2001 From: Kelorastus <108483685+Kelorastus@users.noreply.github.com> Date: Thu, 1 Oct 2026 09:35:18 +0200 Subject: [PATCH 11/16] fix --- src-tauri/tauri.conf.json | 2 +- src/components/ActionPanel.svelte | 191 ++++++++++++++++-------------- src/lib/mock.ts | 14 +++ src/lib/types.ts | 1 + 4 files changed, 115 insertions(+), 93 deletions(-) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 519342d..69b3566 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", "productName": "ODIAN Launcher", - "version": "0.1.41", + "version": "0.1.42", "identifier": "fr.odian.launcher", "build": { "frontendDist": "../dist", diff --git a/src/components/ActionPanel.svelte b/src/components/ActionPanel.svelte index 27f68b6..326ae55 100644 --- a/src/components/ActionPanel.svelte +++ b/src/components/ActionPanel.svelte @@ -98,6 +98,12 @@ // like the real one on screen, and mistaking the two is how a bug gets chased in the // wrong tree - or a demo gets given from an unbuilt branch. const devOn = $derived(launcher.devOn); + // Dev mode's controls follow DEV MODE, not whatever the hub is currently offering. They + // used to live inside the "launch" branch, so a PC with nothing installed was told to name + // its checkout folder and given nowhere on screen to name it - the dead end that made a + // fresh dev PC look like it could only install. + const TRANSIENT = ["loading", "signing_in", "installing", "restoring", "syncing", "building", "removing", "pulling_tiles", "stack"]; + const showDev = $derived(devOn && !TRANSIENT.includes(action)); const devRun = $derived(launcher.devReady); const devRoot = $derived(launcher.settings?.dev_root ?? ""); const devTarget = $derived(launcher.settings?.dev_target ?? "client"); @@ -266,98 +272,6 @@

{/if} - {#if devOn} - -
-
- - DEV - - {devRun ? TARGETS.find((o) => o.key === devTarget)?.name ?? "" : "no checkout"} -
- -
- {#each TARGETS as option (option.key)} - - {/each} -
- -
- launcher.setDev({ dev_root: e.currentTarget.value.trim() })} - /> - -
- -
- - launcher.setDev({ dev_user: e.currentTarget.value.trim() })} - /> -
- -
- {#if releasing} - - {:else} - - {/if} - {#if hasOutput && !releasing} - - {:else if !s?.online} - needs the DHP - {/if} -
- - - - {#if !devRun} -

Name the folder that holds ODIAN_Engine and Launch runs from it.

- {:else if devUser} -

- Running as {devUser} — this PC will not sync with the DHP. -

- {/if} -
- {/if} {#if unfinished}

@@ -492,6 +406,99 @@

{/if} + {#if showDev} + +
+
+ + DEV + + {devRun ? TARGETS.find((o) => o.key === devTarget)?.name ?? "" : "no checkout"} +
+ +
+ {#each TARGETS as option (option.key)} + + {/each} +
+ +
+ launcher.setDev({ dev_root: e.currentTarget.value.trim() })} + /> + +
+ +
+ + launcher.setDev({ dev_user: e.currentTarget.value.trim() })} + /> +
+ +
+ {#if releasing} + + {:else} + + {/if} + {#if hasOutput && !releasing} + + {:else if !s?.online} + needs the DHP + {/if} +
+ + + + {#if !devRun} +

Name the folder that holds ODIAN_Engine and Launch runs from it.

+ {:else if devUser} +

+ Running as {devUser} — this PC will not sync with the DHP. +

+ {/if} +
+ {/if} + {#if showNotice}