Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package artcraft-launcher for 
openSUSE:Factory checked in at 2026-11-01 22:24:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/artcraft-launcher (Old)
 and      /work/SRC/openSUSE:Factory/.artcraft-launcher.new.1255 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "artcraft-launcher"

Sun Nov  1 22:24:36 2026 rev:4 rq:1394249 version:0.12.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/artcraft-launcher/artcraft-launcher.changes      
2026-10-31 23:14:01.652031593 +0100
+++ 
/work/SRC/openSUSE:Factory/.artcraft-launcher.new.1255/artcraft-launcher.changes
    2026-11-01 22:25:59.235396128 +0100
@@ -1,0 +2,19 @@
+Sun Nov  1 10:00:39 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 0.12.0 (upstream tag v0.12.0):
+  * New community app Craft Anything in the catalog, with its
+    app icon, details page and translations; Flatpak OCI image
+    build helper and a Windows antivirus incident note.
+  * Re-vendor (update=false, filter=true): dependency set
+    unchanged (workspace version stamps only); Windows-only
+    crate files filtered out; licence set and Legal-Review-Notice
+    unchanged; cargo_audit reports no advisories.
+  * All three patches apply unchanged (no upstream changes in
+    the patched files); the rpm-managed copy still only
+    announces a newer launcher, it never installs upstream
+    builds over distro files.
+  * Strip ring's Windows-only pregenerated objects from the
+    vendor with checksum repair (Linux builds them from sources).
+- Set the fixed metainfo release date to 2026-11-01 (v0.12.0).
+
+-------------------------------------------------------------------

Old:
----
  artcraft-launcher-0.11.1.tar.zst

New:
----
  artcraft-launcher-0.12.0.tar.zst

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ artcraft-launcher.spec ++++++
--- /var/tmp/diff_new_pack.jGwUEj/_old  2026-11-01 22:26:00.698456777 +0100
+++ /var/tmp/diff_new_pack.jGwUEj/_new  2026-11-01 22:26:00.699456819 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           artcraft-launcher
-Version:        0.11.1
+Version:        0.12.0
 Release:        0
 Summary:        Install, update and launch the Craft App Suite
 # Legal-Review-Notice: scope is the one shipped target (artcraft-launcher,
@@ -59,6 +59,8 @@
 URL:            https://github.com/storytold/craft-launcher
 Source0:        %{name}-%{version}.tar.zst
 Source1:        vendor.tar.zst
+# Stripped from this tarball (checksum entries dropped): ring's Windows-only
+# pregenerated/*-nasm.o/*-win32n.o (build.rs maps them to Windows targets 
only).
 # Of the vendor tree's prebuilt files only libloading's Windows-only test
 # fixtures remain; checksums forbid stripping them, so each is named below.
 # Source-Binary-Exception: vendor.tar.zst:vendor/libloading-*/tests/*.dll -- 
test-data: fixtures loaded only by libloading's #![cfg(windows)] tests, never 
on Linux
@@ -123,10 +125,10 @@
 install -Dm0755 target/release/artcraft-launcher 
%{buildroot}%{_bindir}/artcraft-launcher
 install -Dm0644 packaging/linux/ai.storyteller.artcraft-launcher.desktop 
%{buildroot}%{_datadir}/applications/ai.storyteller.artcraft-launcher.desktop
 install -d -m 0755 %{buildroot}%{_datadir}/metainfo
-# Fixed upstream release date (v0.11.1, 2026-10-31): a build-time date would
+# Fixed upstream release date (v0.12.0, 2026-11-01): a build-time date would
 # make the metainfo differ on every rebuild, and spec-cleaner macro-expands
 # the percent-sequences of any date format string, so keep this a plain string.
-sed -e "s/@VERSION@/%{version}/g" -e "s/@DATE@/2026-10-31/g" 
packaging/linux/ai.storyteller.artcraft-launcher.metainfo.xml.in > 
%{buildroot}%{_datadir}/metainfo/ai.storyteller.artcraft-launcher.metainfo.xml
+sed -e "s/@VERSION@/%{version}/g" -e "s/@DATE@/2026-11-01/g" 
packaging/linux/ai.storyteller.artcraft-launcher.metainfo.xml.in > 
%{buildroot}%{_datadir}/metainfo/ai.storyteller.artcraft-launcher.metainfo.xml
 # Upstream declares the app icon as type="stock" but it is a custom hicolor
 # icon, so declare it as cached for appstream validation.
 sed -i 's|<icon type="stock">ai.storyteller.artcraft-launcher</icon>|<icon 
type="cached" width="64" 
height="64">ai.storyteller.artcraft-launcher.png</icon>|' 
%{buildroot}%{_datadir}/metainfo/ai.storyteller.artcraft-launcher.metainfo.xml

++++++ _service ++++++
--- /var/tmp/diff_new_pack.jGwUEj/_old  2026-11-01 22:26:00.737458394 +0100
+++ /var/tmp/diff_new_pack.jGwUEj/_new  2026-11-01 22:26:00.740458518 +0100
@@ -2,7 +2,7 @@
   <service mode="manual" name="tar_scm">
     <param name="url">https://github.com/storytold/craft-launcher.git</param>
     <param name="scm">git</param>
-    <param name="revision">v0.11.1</param>
+    <param name="revision">v0.12.0</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ artcraft-launcher-0.11.1.tar.zst -> artcraft-launcher-0.12.0.tar.zst 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/.github/workflows/release.yml 
new/artcraft-launcher-0.12.0/.github/workflows/release.yml
--- old/artcraft-launcher-0.11.1/.github/workflows/release.yml  2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/.github/workflows/release.yml  2026-11-01 
04:39:30.000000000 +0100
@@ -12,6 +12,7 @@
 
 permissions:
   contents: write
+  packages: write
 
 concurrency:
   group: release-${{ github.ref }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artcraft-launcher-0.11.1/AGENTS.md 
new/artcraft-launcher-0.12.0/AGENTS.md
--- old/artcraft-launcher-0.11.1/AGENTS.md      2026-10-31 06:53:58.000000000 
+0100
+++ new/artcraft-launcher-0.12.0/AGENTS.md      2026-11-01 04:39:30.000000000 
+0100
@@ -2,7 +2,7 @@
 
 ArtCraft Launcher installs, updates and launches the **Craft App Suite** 
(PhotoCraft, LightCraft,
 FilmCraft, DesignCraft, VectorCraft, PdfCraft, EffectCraft, WordCraft, 
DeckCraft, GridCraft,
-CADCraft, SoundCraft, FigCraft), plus approved **community apps** made outside 
ArtCraft and labelled
+CADCraft, SoundCraft, FigCraft, Craft Anything), plus approved **community 
apps** made outside ArtCraft and labelled
 as such (today SolidCraft, by Tangency Labs). It is written in **Rust only** 
(no JavaScript or TypeScript): the desktop
 app is native egui/eframe, and the web build is the same Rust compiled to 
WebAssembly (trunk +
 wasm-bindgen). **No Tauri, Electron or webview shells**, ever.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artcraft-launcher-0.11.1/ATTRIBUTION.md 
new/artcraft-launcher-0.12.0/ATTRIBUTION.md
--- old/artcraft-launcher-0.11.1/ATTRIBUTION.md 2026-10-31 06:53:58.000000000 
+0100
+++ new/artcraft-launcher-0.12.0/ATTRIBUTION.md 2026-11-01 04:39:30.000000000 
+0100
@@ -50,6 +50,7 @@
 | `assets/app-icons/solidcraft.png` | SolidCraft app icon (app icon), 128 px | 
Tangency Labs and the SolidCraft contributors | 
[`tangency-labs/solidcraft`](https://github.com/tangency-labs/solidcraft) 
`assets/icons/app/linux/exports/hicolor/128x128/apps/io.tangencylabs.solidcraft.png`,
 copied unmodified | MIT OR Apache-2.0, 
[`assets/app-icons/LICENSE-MIT-SolidCraft.txt`](assets/app-icons/LICENSE-MIT-SolidCraft.txt),
 
[`assets/app-icons/LICENSE-APACHE-SolidCraft.txt`](assets/app-icons/LICENSE-APACHE-SolidCraft.txt)
 |
 | `assets/app-icons/soundcraft.png` | SoundCraft app icon (nightingale 
(placeholder)), 128 px | ArtCraft Team and the SoundCraft contributors | 
[`storytold/soundcraft`](https://github.com/storytold/soundcraft) 
`assets/app-icon/hicolor/128x128/apps/ai.storyteller.soundcraft.png`, copied 
unmodified | MIT OR Apache-2.0 (SoundCraft's 
[`LICENSE-MIT`](https://github.com/storytold/soundcraft/blob/main/LICENSE-MIT), 
[`LICENSE-APACHE`](https://github.com/storytold/soundcraft/blob/main/LICENSE-APACHE))
 |
 | `assets/app-icons/figcraft.png` | FigCraft app icon (chameleon), 128 px | 
ArtCraft Team and the FigCraft contributors | 
[`storytold/figcraft`](https://github.com/storytold/figcraft) 
`assets/app-icon/hicolor/128x128/apps/ai.storyteller.figcraft.png`, copied 
unmodified | MIT OR Apache-2.0 (FigCraft's 
[`LICENSE-MIT`](https://github.com/storytold/figcraft/blob/main/LICENSE-MIT), 
[`LICENSE-APACHE`](https://github.com/storytold/figcraft/blob/main/LICENSE-APACHE))
 |
+| `assets/app-icons/craft-anything.png` | Craft Anything app icon (engraved 
raven), 128 px | ArtCraft Team | 
[`storytold/craft-anything`](https://github.com/storytold/craft-anything) 
`assets/app-icon/hicolor/128x128/apps/ai.storyteller.craft-anything.png`, 
copied unmodified | **Not open source; not MIT or Apache-2.0.** Used on the 
terms of the ArtCraft brand assets (Craft Anything's 
[`assets/app-icon/LICENSE.txt`](https://github.com/storytold/craft-anything/blob/main/assets/app-icon/LICENSE.txt),
 [`docs/brand/LICENSE-brand.txt`](docs/brand/LICENSE-brand.txt)) |
 
 ## Documentation and README
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artcraft-launcher-0.11.1/Cargo.lock 
new/artcraft-launcher-0.12.0/Cargo.lock
--- old/artcraft-launcher-0.11.1/Cargo.lock     2026-10-31 06:53:58.000000000 
+0100
+++ new/artcraft-launcher-0.12.0/Cargo.lock     2026-11-01 04:39:30.000000000 
+0100
@@ -272,7 +272,7 @@
 
 [[package]]
 name = "artcraft-launcher"
-version = "0.11.1"
+version = "0.12.0"
 dependencies = [
  "artcraft-launcher-core",
  "artcraft-launcher-native",
@@ -298,7 +298,7 @@
 
 [[package]]
 name = "artcraft-launcher-core"
-version = "0.11.1"
+version = "0.12.0"
 dependencies = [
  "jiff",
  "semver",
@@ -308,7 +308,7 @@
 
 [[package]]
 name = "artcraft-launcher-native"
-version = "0.11.1"
+version = "0.12.0"
 dependencies = [
  "artcraft-launcher-core",
  "craft-update",
@@ -332,7 +332,7 @@
 
 [[package]]
 name = "artcraft-launcher-ui-egui"
-version = "0.11.1"
+version = "0.12.0"
 dependencies = [
  "artcraft-launcher-core",
  "craft-ui",
@@ -352,7 +352,7 @@
 
 [[package]]
 name = "artcraft-launcher-web"
-version = "0.11.1"
+version = "0.12.0"
 dependencies = [
  "artcraft-launcher-core",
  "artcraft-launcher-ui-egui",
@@ -6222,7 +6222,7 @@
 
 [[package]]
 name = "xtask"
-version = "0.11.1"
+version = "0.12.0"
 dependencies = [
  "jiff",
  "semver",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artcraft-launcher-0.11.1/Cargo.toml 
new/artcraft-launcher-0.12.0/Cargo.toml
--- old/artcraft-launcher-0.11.1/Cargo.toml     2026-10-31 06:53:58.000000000 
+0100
+++ new/artcraft-launcher-0.12.0/Cargo.toml     2026-11-01 04:39:30.000000000 
+0100
@@ -3,7 +3,7 @@
 members = ["crates/*", "apps/*", "xtask"]
 
 [workspace.package]
-version = "0.11.1"
+version = "0.12.0"
 edition = "2024"
 license = "MIT OR Apache-2.0"
 rust-version = "1.95"
@@ -38,9 +38,14 @@
 
 [profile.dev.package."*"]
 opt-level = 2
+debug = false
 
+# Line tables keep file:line in panic backtraces but drop variable info, as in 
the other craft
+# apps: full debug info made Windows test links slow and the CI cache large. 
To inspect locals in
+# a debugger, build with CARGO_PROFILE_DEV_DEBUG=true.
 [profile.dev]
 opt-level = 1
+debug = "line-tables-only"
 
 [profile.release]
 lto = "thin"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artcraft-launcher-0.11.1/README.md 
new/artcraft-launcher-0.12.0/README.md
--- old/artcraft-launcher-0.11.1/README.md      2026-10-31 06:53:58.000000000 
+0100
+++ new/artcraft-launcher-0.12.0/README.md      2026-11-01 04:39:30.000000000 
+0100
@@ -16,7 +16,7 @@
 <p align="center">
   <b>One place to install, update and open every app in the Craft App Suite, 
rebuilt in pure Rust.</b><br>
   PhotoCraft, LightCraft, FilmCraft, DesignCraft, VectorCraft, PdfCraft, 
EffectCraft, WordCraft,<br>
-  DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft and the community app 
SolidCraft: the right build for your computer, kept up to date.
+  DeckCraft, GridCraft, CADCraft, SoundCraft, FigCraft, Craft Anything and the 
community app SolidCraft: the right build for your computer, kept up to date.
 </p>
 
 <p align="center">
@@ -272,6 +272,7 @@
 | <img 
src="https://raw.githubusercontent.com/storytold/deckcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.deckcraft.png";
 alt="" width="32" height="32"> | **DeckCraft** | Presentations and slide decks 
| [GitHub](https://github.com/storytold/deckcraft) | 
[Website](https://getartcraft.com/apps/deckcraft) |
 | <img 
src="https://raw.githubusercontent.com/storytold/cadcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.cadcraft.png";
 alt="" width="32" height="32"> | **CADCraft** | Computer-aided design | 
[GitHub](https://github.com/storytold/cadcraft) | 
[Website](https://getartcraft.com/apps/cadcraft) |
 | <img 
src="https://raw.githubusercontent.com/storytold/gridcraft/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.gridcraft.png";
 alt="" width="32" height="32"> | **GridCraft** | Spreadsheets and data | 
[GitHub](https://github.com/storytold/gridcraft) | 
[Website](https://getartcraft.com/apps/gridcraft) |
+| <img 
src="https://raw.githubusercontent.com/storytold/craft-anything/main/assets/app-icon/hicolor/64x64/apps/ai.storyteller.craft-anything.png";
 alt="" width="32" height="32"> | **Craft Anything** | See how any software 
works, then build your own | 
[GitHub](https://github.com/storytold/craft-anything) | 
[Website](https://getartcraft.com/apps/craft-anything) |
 | <img 
src="https://raw.githubusercontent.com/tangency-labs/solidcraft/main/assets/icons/app/linux/exports/hicolor/64x64/apps/io.tangencylabs.solidcraft.png";
 alt="" width="32" height="32"> | **SolidCraft** | Parametric 3D CAD by 
Tangency Labs (community app) | 
[GitHub](https://github.com/tangency-labs/solidcraft) | |
 
 And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video 
studio for artists who want real control.
Binary files old/artcraft-launcher-0.11.1/assets/app-icons/craft-anything.png 
and new/artcraft-launcher-0.12.0/assets/app-icons/craft-anything.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artcraft-launcher-0.11.1/crates/core/src/catalog.rs 
new/artcraft-launcher-0.12.0/crates/core/src/catalog.rs
--- old/artcraft-launcher-0.11.1/crates/core/src/catalog.rs     2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/core/src/catalog.rs     2026-11-01 
04:39:30.000000000 +0100
@@ -1,4 +1,4 @@
-//! The Craft App Suite: the fourteen apps the launcher knows about.
+//! The Craft App Suite: the fifteen apps the launcher knows about.
 //!
 //! The list is data so a later version can fetch it from an API; [`SUITE`] is 
the built-in copy.
 //!
@@ -123,7 +123,7 @@
 }
 
 /// The Craft App Suite, in display order matching getartcraft.com, then the 
community apps:
-pub const SUITE: [CraftApp; 14] = [
+pub const SUITE: [CraftApp; 15] = [
     app("photocraft", "PhotoCraft", "Image editing", [[0x2f, 0x7b, 0xf5], 
[0x1a, 0x5b, 0xc4], [0x7f, 0xb0, 0xff]], "storytold/photocraft"),
     app("vectorcraft", "VectorCraft", "Vector illustration", [[0xe8, 0x57, 
0x3f], [0xb8, 0x3a, 0x24], [0xff, 0x8a, 0x70]], "storytold/vectorcraft"),
     app(
@@ -195,6 +195,14 @@
         "storytold/cadcraft",
     ),
     app("gridcraft", "GridCraft", "Spreadsheets and data", [[0x1f, 0x9d, 
0x55], [0x12, 0x70, 0x3a], [0x4f, 0xd6, 0x8a]], "storytold/gridcraft"),
+    // The raven's tile blue, with its README's deep (#1659c4) and light 
(#74aaff) accents for text.
+    app(
+        "craft-anything",
+        "Craft Anything",
+        "Find out how any software works, then craft your own",
+        [[0x4e, 0x7b, 0xfb], [0x16, 0x59, 0xc4], [0x74, 0xaa, 0xff]],
+        "storytold/craft-anything",
+    ),
     CraftApp {
         kind: AppKind::Community,
         publisher: "Tangency Labs",
@@ -269,6 +277,7 @@
         "wordcraft" => 
include_bytes!("../../../assets/app-icons/wordcraft.png"),
         "deckcraft" => 
include_bytes!("../../../assets/app-icons/deckcraft.png"),
         "gridcraft" => 
include_bytes!("../../../assets/app-icons/gridcraft.png"),
+        "craft-anything" => 
include_bytes!("../../../assets/app-icons/craft-anything.png"),
         "solidcraft" => 
include_bytes!("../../../assets/app-icons/solidcraft.png"),
         "cadcraft" => include_bytes!("../../../assets/app-icons/cadcraft.png"),
         "soundcraft" => 
include_bytes!("../../../assets/app-icons/soundcraft.png"),
@@ -291,14 +300,15 @@
     }
 
     #[test]
-    fn suite_has_fourteen_apps_with_unique_ids() {
-        assert_eq!(SUITE.len(), 14);
+    fn suite_has_fifteen_apps_with_unique_ids() {
+        assert_eq!(SUITE.len(), 15);
         let mut ids: Vec<_> = SUITE.iter().map(|a| a.id).collect();
         ids.sort_unstable();
         ids.dedup();
         assert_eq!(ids.len(), SUITE.len());
         for a in &SUITE {
-            assert_eq!(a.name.to_lowercase(), a.id);
+            // `Craft Anything` is `craft-anything`.
+            assert_eq!(a.name.to_lowercase().replace(' ', "-"), a.id);
             match a.kind {
                 AppKind::Official => assert_eq!(a.repo, 
format!("storytold/{}", a.id)),
                 AppKind::Community => 
assert!(!a.repo.starts_with("storytold/"), "{} is community", a.id),
@@ -322,6 +332,16 @@
     }
 
     #[test]
+    fn craft_anything_is_an_official_app() {
+        let ca = CraftApp::by_id("craft-anything").unwrap();
+        assert_eq!(ca.kind, AppKind::Official);
+        assert_eq!(ca.repo, "storytold/craft-anything");
+        assert_eq!(ca.bundle_id(), "ai.storyteller.craft-anything");
+        assert_eq!(ca.website(), 
"https://getartcraft.com/apps/craft-anything";);
+        assert_eq!(ca.mac_team, Some(ARTCRAFT_TEAM_ID));
+    }
+
+    #[test]
     fn pdfcraft_also_answers_to_printcraft() {
         let pdf = CraftApp::by_id("pdfcraft").unwrap();
         assert_eq!(pdf.stems().collect::<Vec<_>>(), ["pdfcraft", 
"printcraft"]);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artcraft-launcher-0.11.1/crates/core/src/details.rs 
new/artcraft-launcher-0.12.0/crates/core/src/details.rs
--- old/artcraft-launcher-0.11.1/crates/core/src/details.rs     2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/core/src/details.rs     2026-11-01 
04:39:30.000000000 +0100
@@ -139,7 +139,7 @@
 /// Where every Craft App runs (getartcraft.com lists the same for each of 
them).
 const PLATFORMS: &str = "macOS, Windows, Linux, FreeBSD, web";
 
-pub const DETAILS: [AppDetails; 14] = [
+pub const DETAILS: [AppDetails; 15] = [
     AppDetails {
         id: "photocraft",
         headline: "The image editor you already know how to use.",
@@ -470,6 +470,27 @@
         ],
         shots: &[],
         platforms: PLATFORMS,
+    },
+    AppDetails {
+        id: "craft-anything",
+        headline: "See how any website, app or game works, then build your 
own.",
+        about: "Point it at a target and say what you want. It studies the 
original with real inspection tools, has a \
+                coding agent build a new project in the stack you ask for, 
checks the result against the original and \
+                refines it. Open source and clean-room.",
+        features: &[
+            feature(
+                "Study anything",
+                "Websites, desktop apps, phone apps, games and files: find out 
how they're built, with the evidence behind every answer.",
+            ),
+            feature("Build your own", "Say what you want and a coding agent 
builds a new project in the language or engine you name."),
+            feature(
+                "Checked, not guessed",
+                "Every build is compared with the original, at three screen 
widths for a page, and refined until it's close.",
+            ),
+            feature("Agent-ready", "Every tool is a CLI command and an MCP 
tool, and no AI is needed just to inspect."),
+        ],
+        shots: &[],
+        platforms: PLATFORMS,
     },
     AppDetails {
         id: "solidcraft",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/native/src/desktop_entry.rs 
new/artcraft-launcher-0.12.0/crates/native/src/desktop_entry.rs
--- old/artcraft-launcher-0.11.1/crates/native/src/desktop_entry.rs     
2026-10-31 06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/native/src/desktop_entry.rs     
2026-11-01 04:39:30.000000000 +0100
@@ -32,6 +32,7 @@
         "cadcraft" => ("Graphics;Engineering;VectorGraphics;", None),
         "soundcraft" => ("AudioVideo;Audio;Midi;Mixer;Sequencer;Recorder;", 
None),
         "figcraft" => ("Graphics;2DGraphics;VectorGraphics;X-Design;", 
Some("figcraft")),
+        "craft-anything" => ("Development;Debugger;", None),
         _ => ("Graphics;", None),
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/cs.tsv 
new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/cs.tsv
--- old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/cs.tsv 2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/cs.tsv 2026-11-01 
04:39:30.000000000 +0100
@@ -156,6 +156,7 @@
 wordcraft      Writing and document design     Psaní a návrh dokumentů
 deckcraft      Presentations and slide shows   Prezentace a promítání snímků
 gridcraft      Spreadsheets and data   Tabulky a data
+craft-anything Find out how any software works, then craft your own    
Zjistěte, jak funguje jakýkoli software, a vytvořte si vlastní
 solidcraft     Parametric 3D CAD       Parametrické 3D CAD
 cadcraft       Computer-aided design and drafting      Počítačem podporované 
navrhování a kreslení
 soundcraft     Recording, editing and mixing audio     Nahrávání, úpravy a 
mixování zvuku
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/de.tsv 
new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/de.tsv
--- old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/de.tsv 2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/de.tsv 2026-11-01 
04:39:30.000000000 +0100
@@ -174,6 +174,7 @@
 wordcraft      Writing and document design     Schreiben und Dokumentgestaltung
 deckcraft      Presentations and slide shows   Präsentationen und Diashows
 gridcraft      Spreadsheets and data   Tabellenkalkulation und Daten
+craft-anything Find out how any software works, then craft your own    
Verstehen, wie jede Software funktioniert, und die eigene bauen
 solidcraft     Parametric 3D CAD       Parametrisches 3D-CAD
 cadcraft       Computer-aided design and drafting      Computergestütztes 
Konstruieren und Zeichnen
 soundcraft     Recording, editing and mixing audio     Audio aufnehmen, 
bearbeiten und mischen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/es.tsv 
new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/es.tsv
--- old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/es.tsv 2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/es.tsv 2026-11-01 
04:39:30.000000000 +0100
@@ -169,6 +169,7 @@
 wordcraft      Writing and document design     Escritura y diseño de documentos
 deckcraft      Presentations and slide shows   Presentaciones y diapositivas
 gridcraft      Spreadsheets and data   Hojas de cálculo y datos
+craft-anything Find out how any software works, then craft your own    
Descubre cómo funciona cualquier software y crea el tuyo
 solidcraft     Parametric 3D CAD       CAD 3D paramétrico
 cadcraft       Computer-aided design and drafting      CAD: diseño y dibujo 
técnico
 soundcraft     Recording, editing and mixing audio     Grabación, edición y 
mezcla de audio
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/fr.tsv 
new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/fr.tsv
--- old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/fr.tsv 2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/fr.tsv 2026-11-01 
04:39:30.000000000 +0100
@@ -172,6 +172,7 @@
 wordcraft      Writing and document design     Rédaction et mise en forme de 
documents
 deckcraft      Presentations and slide shows   Présentations et diaporamas
 gridcraft      Spreadsheets and data   Tableurs et données
+craft-anything Find out how any software works, then craft your own    
Découvrez comment fonctionne n'importe quel logiciel, puis créez le vôtre
 solidcraft     Parametric 3D CAD       CAO paramétrique 3D
 cadcraft       Computer-aided design and drafting      Conception et dessin 
assistés par ordinateur
 soundcraft     Recording, editing and mixing audio     Enregistrement, édition 
et mixage audio
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/hu.tsv 
new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/hu.tsv
--- old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/hu.tsv 2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/hu.tsv 2026-11-01 
04:39:30.000000000 +0100
@@ -174,6 +174,7 @@
 wordcraft      Writing and document design     Írás és dokumentumtervezés
 deckcraft      Presentations and slide shows   Prezentációk és diavetítések
 gridcraft      Spreadsheets and data   Táblázatok és adatok
+craft-anything Find out how any software works, then craft your own    Ismerd 
meg, hogyan működik bármely szoftver, majd készítsd el a sajátodat
 solidcraft     Parametric 3D CAD       Paraméteres 3D CAD
 cadcraft       Computer-aided design and drafting      Számítógépes tervezés 
és műszaki rajz
 soundcraft     Recording, editing and mixing audio     Hangrögzítés, 
hangszerkesztés és keverés
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/ja.tsv 
new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/ja.tsv
--- old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/ja.tsv 2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/ja.tsv 2026-11-01 
04:39:30.000000000 +0100
@@ -176,6 +176,7 @@
 wordcraft      Writing and document design     文書作成とデザイン
 deckcraft      Presentations and slide shows   プレゼンテーションとスライドショー
 gridcraft      Spreadsheets and data   表計算とデータ
+craft-anything Find out how any software works, then craft your own    
あらゆるソフトウェアの仕組みを知り、自分だけのものを作る
 solidcraft     Parametric 3D CAD       パラメトリック3D CAD
 cadcraft       Computer-aided design and drafting      コンピューター支援設計と製図
 soundcraft     Recording, editing and mixing audio     オーディオの録音、編集、ミックス
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/pl.tsv 
new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/pl.tsv
--- old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/pl.tsv 2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/pl.tsv 2026-11-01 
04:39:30.000000000 +0100
@@ -175,6 +175,7 @@
 wordcraft      Writing and document design     Pisanie i projektowanie 
dokumentów
 deckcraft      Presentations and slide shows   Prezentacje i pokazy slajdów
 gridcraft      Spreadsheets and data   Arkusze kalkulacyjne i dane
+craft-anything Find out how any software works, then craft your own    Dowiedz 
się, jak działa dowolne oprogramowanie, i stwórz własne
 solidcraft     Parametric 3D CAD       Parametryczny CAD 3D
 cadcraft       Computer-aided design and drafting      Projektowanie i 
kreślenie wspomagane komputerowo
 soundcraft     Recording, editing and mixing audio     Nagrywanie, edycja i 
miksowanie dźwięku
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/pt-BR.tsv 
new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/pt-BR.tsv
--- old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/pt-BR.tsv      
2026-10-31 06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/pt-BR.tsv      
2026-11-01 04:39:30.000000000 +0100
@@ -162,6 +162,7 @@
 wordcraft      Writing and document design     Escrita e design de documentos
 deckcraft      Presentations and slide shows   Apresentações e slides
 gridcraft      Spreadsheets and data   Planilhas e dados
+craft-anything Find out how any software works, then craft your own    
Descubra como qualquer software funciona e crie o seu
 solidcraft     Parametric 3D CAD       CAD 3D paramétrico
 cadcraft       Computer-aided design and drafting      Desenho técnico e 
projeto assistido por computador (CAD)
 soundcraft     Recording, editing and mixing audio     Gravação, edição e 
mixagem de áudio
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/ru.tsv 
new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/ru.tsv
--- old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/ru.tsv 2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/ru.tsv 2026-11-01 
04:39:30.000000000 +0100
@@ -172,6 +172,7 @@
 wordcraft      Writing and document design     Тексты и оформление документов
 deckcraft      Presentations and slide shows   Презентации и слайд-шоу
 gridcraft      Spreadsheets and data   Электронные таблицы и данные
+craft-anything Find out how any software works, then craft your own    
Узнайте, как устроена любая программа, и создайте свою
 solidcraft     Parametric 3D CAD       Параметрический 3D CAD
 cadcraft       Computer-aided design and drafting      Автоматизированное 
проектирование и черчение
 soundcraft     Recording, editing and mixing audio     Запись, редактирование 
и сведение звука
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/zh-CN.tsv 
new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/zh-CN.tsv
--- old/artcraft-launcher-0.11.1/crates/ui-egui/src/i18n/zh-CN.tsv      
2026-10-31 06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/crates/ui-egui/src/i18n/zh-CN.tsv      
2026-11-01 04:39:30.000000000 +0100
@@ -250,6 +250,7 @@
 wordcraft      Writing and document design     写作与文档设计
 deckcraft      Presentations and slide shows   演示文稿与幻灯片
 gridcraft      Spreadsheets and data   电子表格与数据处理
+craft-anything Find out how any software works, then craft your own    
了解任何软件的工作原理,然后打造你自己的版本
 solidcraft     Parametric 3D CAD       参数化三维 CAD
 cadcraft       Computer-aided design and drafting      计算机辅助设计与制图
 soundcraft     Recording, editing and mixing audio     音频录制、编辑与混音
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/docs/incident-2026-10-windows-antivirus.md 
new/artcraft-launcher-0.12.0/docs/incident-2026-10-windows-antivirus.md
--- old/artcraft-launcher-0.11.1/docs/incident-2026-10-windows-antivirus.md     
1970-01-01 01:00:00.000000000 +0100
+++ new/artcraft-launcher-0.12.0/docs/incident-2026-10-windows-antivirus.md     
2026-11-01 04:39:30.000000000 +0100
@@ -0,0 +1,108 @@
+# Incident: antivirus flagged ArtCraft Launcher during Update all on Windows
+
+Status (2026-10-31): the Update all route is reverted on `main` (#1077) but 
not yet released. The
+same elevated PowerShell route is still used by all-users downgrades, and no 
test has confirmed
+that the revert stops the detection. See [Still open](#still-open).
+
+## Summary
+
+Since v0.10.0, updating two or more all-users apps together normally ran 
installers through a hidden,
+elevated PowerShell with a Base64 script. Users soon reported antivirus flags 
during Update all.
+Kaspersky's report in #1045 shows a behavioural `PDM:Trojan.Win32.Generic` 
detection. It killed
+and deleted `artcraft-launcher.exe` and removed its shortcut and registry 
entry, and the reporter
+had to reinstall ArtCraft Launcher and every app.
+
+Nothing found so far suggests malicious intent: this code only ran `msiexec` 
on packages checked
+against their release checksums, and Windows still showed a permission prompt. 
The route is treated
+as the cause because the evidence below points to it, not because the 
detection has been reproduced.
+
+## What triggered it
+
+#974 added one permission prompt for an Update all of all-users apps. For two 
or more apps, unless
+the batch was too long or PowerShell could not start (each app then got its 
own `msiexec` prompt),
+ArtCraft Launcher:
+
+1. started a hidden `powershell.exe`;
+2. asked for elevation with `Start-Process -Verb RunAs -WindowStyle Hidden`;
+3. ran a script passed as `-EncodedCommand`;
+4. ran `msiexec` from that script on packages in a user-writable folder.
+
+Each step had a reason, but together they match a common malware pattern. A 
single app kept going
+straight to `msiexec`, without PowerShell. All-users downgrades (`46cffe6`, in 
#1007) reuse the
+same elevated script code.
+
+## Timeline (UTC)
+
+| When | What |
+|---|---|
+| Oct 29 04:05 | #974 merged |
+| Oct 29 19:47 | v0.10.0 released, the first release with this route |
+| Oct 29 22:41 | #1027: antivirus flags Update all, but updating one at a time 
is fine |
+| Oct 30 06:54 | #1042: antivirus removes files during Update all |
+| Oct 30 09:27 | #1045: Kaspersky reports a Trojan during Update all |
+| Oct 31 03:48 | v0.11.0 published, still with this route; later revoked |
+| Oct 31 05:31 | #1077 merged, reverting #974 |
+
+## Evidence
+
+Pointing to this route:
+
+- The Update all reports began about three hours after v0.10.0 was released.
+- #1027 separates the two routes: one at a time works, and Update all gets 
flagged.
+- The #1045 detection is behavioural, so it depends on what ArtCraft Launcher 
does when it runs.
+
+Not established:
+
+- The detection has not been reproduced on a machine under our control, before 
or after the revert.
+- The reports in #1027 and #1042 do not name a detection, so they may not 
share the #1045 cause.
+
+The Avast `FileRepMalware` flag in #251 predates this route and is a separate 
reputation flag.
+
+## File scans didn't detect this
+
+On 2026-10-31, no VirusTotal engine flagged these builds, and Kaspersky's 
engine showed
+`undetected` on all of them:
+
+| Build | Has the route | Malicious / suspicious | Source |
+|---|---|---|---|
+| v0.9.0 MSI | No | 0 / 0 | Existing report |
+| v0.9.0 zip | No | 0 / 0 | Existing report |
+| v0.10.0 MSI | Yes | 0 / 0 | Existing report |
+| v0.11.0 MSI | Yes | 0 / 0 | Existing report |
+| v0.11.0 zip | Yes | 0 / 0 | New scan |
+
+VirusTotal's sandbox run of the v0.11.0 MSI shows no PowerShell, because the 
route needs two or
+more outdated all-users apps and someone to accept the prompt. These clean 
scans therefore say
+little about this kind of detection, and neither our Windows CI nor these 
VirusTotal results flagged
+the route.
+
+## What changed
+
+- #1077 reverts #974, so each all-users update runs `msiexec` directly again. 
This brings back one
+  permission prompt per app.
+- v0.11.0 was revoked, and its release page points users to v0.10.0. v0.10.0 
also contains this
+  route, so its users stay exposed until a release with #1077 ships.
+- #1076, an alternative that also removed the downgrade route, was closed in 
favour of #1077.
+
+## Still open
+
+- **All-users downgrades:** `downgrade_elevated` still uses the same elevated 
PowerShell script,
+  and the command strings are still in the binary. Anyone downgrading an 
all-users app could trigger
+  the same detection.
+- **Release:** no release includes #1077 yet.
+- **Confirmation:** test on a Windows VM with Kaspersky and behaviour 
detection on. Run Update all
+  with two or more outdated all-users apps on an affected build, then on a 
build with #1077. The
+  test only counts if the affected build reproduces the flag.
+- **Remaining lookup:** `msi_context.rs` runs a hidden, non-elevated 
PowerShell lookup on MSI
+  updates. It runs for single-app updates too, which #1027 says are fine, so 
it was left in place.
+  If flags continue, look there next.
+- **Affected users:** the revert does not repair installs the antivirus has 
already damaged. The
+  "isn't where it was installed" errors are tracked in #993.
+
+## For next time
+
+- Don't start hidden, elevated or encoded PowerShell from ArtCraft Launcher. 
Prefer one prompt per app
+  to a script that behaves like malware. Bringing back a single prompt needs a 
different design,
+  such as a signed helper.
+- Before releasing a change to how Windows installs run, try it on a machine 
with behavioural
+  antivirus on. File scans and CI didn't show this problem.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/packaging/linux/flatpak-bundle.sh 
new/artcraft-launcher-0.12.0/packaging/linux/flatpak-bundle.sh
--- old/artcraft-launcher-0.11.1/packaging/linux/flatpak-bundle.sh      
2026-10-31 06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/packaging/linux/flatpak-bundle.sh      
2026-11-01 04:39:30.000000000 +0100
@@ -21,10 +21,12 @@
 FLATHUB=https://dl.flathub.org/repo/flathub.flatpakrepo
 
 TEST=1
+OCI=0
 TARBALL=""
 while [[ $# -gt 0 ]]; do
   case "$1" in
     --no-test) TEST=0; shift ;;
+    --oci) OCI=1; shift ;;
     -h | --help) sed -n '2,14p' "$0"; exit 0 ;;
     -*) echo "unknown argument: $1" >&2; exit 2 ;;
     *) TARBALL="$1"; shift ;;
@@ -63,6 +65,13 @@
 flatpak build-bundle --runtime-repo="$FLATHUB" "$WORK/repo" "$OUT" "$APP_ID" 
stable
 echo "wrote $OUT"
 
+if [[ "$OCI" = 1 ]]; then
+  OUT_OCI="$DIST/$BASENAME-oci"
+  rm -rf "$OUT_OCI"
+  flatpak build-bundle --oci "$WORK/repo" "$OUT_OCI" "$APP_ID" stable
+  echo "wrote OCI layout to $OUT_OCI"
+fi
+
 if [[ "$TEST" = 1 ]]; then
   flatpak install --user -y --noninteractive --reinstall "$OUT"
   flatpak info --user "$APP_ID"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/packaging/linux/flatpak-oci.sh 
new/artcraft-launcher-0.12.0/packaging/linux/flatpak-oci.sh
--- old/artcraft-launcher-0.11.1/packaging/linux/flatpak-oci.sh 1970-01-01 
01:00:00.000000000 +0100
+++ new/artcraft-launcher-0.12.0/packaging/linux/flatpak-oci.sh 2026-11-01 
04:39:30.000000000 +0100
@@ -0,0 +1,64 @@
+#!/usr/bin/env bash
+# Build ArtCraft Launcher as an OCI container layout and push it to GitHub 
Container Registry (GHCR)
+# for consumption by Flatpak OCI clients (flatpak-oci-specs).
+#
+# Usage:
+#   packaging/linux/flatpak-oci.sh [--push] [TARBALL]
+#
+# Environment variables:
+#   REGISTRY       Target registry image (default: 
ghcr.io/storytold/artcraft-launcher)
+#   TAG            Target image tag (default: $VERSION-$ARCH, also tags 
stable-$ARCH)
+#   GITHUB_TOKEN   Token for GHCR authentication when --push is used
+set -euo pipefail
+# shellcheck source=../env.sh
+. "$(dirname "${BASH_SOURCE[0]}")/../env.sh"
+HERE="$ROOT/packaging/linux"
+
+PUSH=0
+TARBALL=""
+while [[ $# -gt 0 ]]; do
+  case "$1" in
+    --push) PUSH=1; shift ;;
+    -h | --help) sed -n '2,12p' "$0"; exit 0 ;;
+    -*) echo "unknown argument: $1" >&2; exit 2 ;;
+    *) TARBALL="$1"; shift ;;
+  esac
+done
+
+ARCH="$(uname -m)"
+case "$ARCH" in
+  x86_64) ;;
+  aarch64 | arm64) ARCH=aarch64 ;;
+  *) echo "unsupported architecture $ARCH" >&2; exit 2 ;;
+esac
+
+BASENAME="artcraft-launcher-$VERSION-linux-$ARCH"
+OUT_OCI="$DIST/$BASENAME-oci"
+
+echo "==> Building Flatpak OCI layout for $BASENAME"
+"$HERE/flatpak-bundle.sh" --oci --no-test "${TARBALL:-}"
+
+[[ -d "$OUT_OCI" ]] || { echo "error: $OUT_OCI layout not generated" >&2; exit 
1; }
+
+REGISTRY="${REGISTRY:-ghcr.io/storytold/artcraft-launcher}"
+TAG="${TAG:-$VERSION-$ARCH}"
+
+echo "==> OCI layout ready at $OUT_OCI (Target: $REGISTRY:$TAG)"
+
+if [[ "$PUSH" = 1 ]]; then
+  command -v skopeo >/dev/null || { echo "error: skopeo is required to push 
OCI images (apt install skopeo)" >&2; exit 1; }
+
+  AUTH_ARGS=()
+  if [[ -n "${GITHUB_TOKEN:-}" ]]; then
+    AUTH_ARGS=(--dest-creds "${GITHUB_ACTOR:-storytold}:$GITHUB_TOKEN")
+  fi
+
+  echo "==> Pushing to $REGISTRY:$TAG"
+  skopeo copy --format oci "${AUTH_ARGS[@]}" "oci:$OUT_OCI" 
"docker://$REGISTRY:$TAG"
+
+  # Also update architecture-specific stable tag
+  echo "==> Pushing to $REGISTRY:stable-$ARCH"
+  skopeo copy --format oci "${AUTH_ARGS[@]}" "oci:$OUT_OCI" 
"docker://$REGISTRY:stable-$ARCH"
+
+  echo "==> Push complete"
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/artcraft-launcher-0.11.1/packaging/windows/package.ps1 
new/artcraft-launcher-0.12.0/packaging/windows/package.ps1
--- old/artcraft-launcher-0.11.1/packaging/windows/package.ps1  2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/packaging/windows/package.ps1  2026-11-01 
04:39:30.000000000 +0100
@@ -113,7 +113,7 @@
   $line = [System.Drawing.Color]::FromArgb(38, 242, 241, 238)
   # The Craft App Suite, in the launcher's order (crates/core/src/catalog.rs).
   $apps = 'photocraft', 'vectorcraft', 'filmcraft', 'lightcraft', 'pdfcraft', 
'effectcraft',
-    'designcraft', 'figcraft', 'wordcraft', 'soundcraft', 'deckcraft', 
'cadcraft', 'gridcraft'
+    'designcraft', 'figcraft', 'wordcraft', 'soundcraft', 'deckcraft', 
'cadcraft', 'gridcraft', 'craft-anything'
   $mark = [System.Drawing.Image]::FromFile((Join-Path $Root 
'assets\app-icon\hicolor\256x256\apps\ai.storyteller.artcraft-launcher.png'))
   $wordmark = [System.Drawing.Image]::FromFile((Join-Path $Root 
'docs\brand\artcraft-logo-white.png'))
   $icons = $apps | ForEach-Object { 
[System.Drawing.Image]::FromFile((Join-Path $Root "assets\app-icons\$_.png")) }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/artcraft-launcher-0.11.1/xtask/src/local.rs 
new/artcraft-launcher-0.12.0/xtask/src/local.rs
--- old/artcraft-launcher-0.11.1/xtask/src/local.rs     2026-10-31 
06:53:58.000000000 +0100
+++ new/artcraft-launcher-0.12.0/xtask/src/local.rs     2026-11-01 
04:39:30.000000000 +0100
@@ -32,6 +32,7 @@
     ("deckcraft", "DeckCraft"),
     ("cadcraft", "CADCraft"),
     ("gridcraft", "GridCraft"),
+    ("craft-anything", "Craft Anything"),
 ];
 
 const DEFAULT_PORT: u16 = 8787;

++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/artcraft-launcher/vendor.tar.zst 
/work/SRC/openSUSE:Factory/.artcraft-launcher.new.1255/vendor.tar.zst differ: 
char 5, line 1

Reply via email to