Files
Kelorastus b7f3061be3 ODIAN Launcher: hub, installer, local stack and remembered sign-in (M2)
- Tauri 2 + Svelte 5 hub in ODIAN dark: patch notes and roadmap, install and
  update progress, local stack status, settings with DHP and MCP addresses.
- crates/odian-packs: Rust installer for pack format v1 (signed manifests,
  resumable verified downloads from a DHP or an ODIAN drive), byte-compatible
  with ODIAN_MCP_Server's Python odian_packs.
- Local stack on 127.0.0.1: Postgres -> Engine API -> tile server -> Odian.exe,
  one Job Object, clean shutdown; database snapshot restore on a fresh PC only.
- Keycloak sign-in through the DHP's MCP, remembered until Sign out with a
  launcher session that renews the Engine token silently.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 15:23:17 +02:00

310 lines
7.4 KiB
JSON

{
"cases": [
{
"path": "Odian/x.exe",
"python": "ok",
"python_error": ""
},
{
"path": "db/20260915T082529Z/data/public.odb_air_timeline_2026_02.dump",
"python": "ok",
"python_error": ""
},
{
"path": "../a",
"python": "error",
"python_error": "ManifestError: path must not contain empty, '.' or '..' parts: '../a'"
},
{
"path": "a/../b",
"python": "error",
"python_error": "ManifestError: path must not contain empty, '.' or '..' parts: 'a/../b'"
},
{
"path": "/a",
"python": "error",
"python_error": "ManifestError: path must be relative with '/' separators: '/a'"
},
{
"path": "C:/a",
"python": "error",
"python_error": "ManifestError: path part 'C:' holds a control character or one of <>:\"|?*: 'C:/a'"
},
{
"path": "a\\b",
"python": "error",
"python_error": "ManifestError: path must be relative with '/' separators: 'a\\\\b'"
},
{
"path": "a//b",
"python": "error",
"python_error": "ManifestError: path must not contain empty, '.' or '..' parts: 'a//b'"
},
{
"path": "",
"python": "error",
"python_error": "ManifestError: empty path"
},
{
"path": "./a",
"python": "error",
"python_error": "ManifestError: path must not contain empty, '.' or '..' parts: './a'"
},
{
"path": "a/",
"python": "error",
"python_error": "ManifestError: path must not contain empty, '.' or '..' parts: 'a/'"
},
{
"path": "a/.",
"python": "error",
"python_error": "ManifestError: path must not contain empty, '.' or '..' parts: 'a/.'"
},
{
"path": ".",
"python": "error",
"python_error": "ManifestError: path must not contain empty, '.' or '..' parts: '.'"
},
{
"path": "..",
"python": "error",
"python_error": "ManifestError: path must not contain empty, '.' or '..' parts: '..'"
},
{
"path": "a/..",
"python": "error",
"python_error": "ManifestError: path must not contain empty, '.' or '..' parts: 'a/..'"
},
{
"path": "Odian/Odian.exe:hidden",
"python": "error",
"python_error": "ManifestError: path part 'Odian.exe:hidden' holds a control character or one of <>:\"|?*: 'Odian/Odian.exe:hidden'"
},
{
"path": "a/b.",
"python": "error",
"python_error": "ManifestError: path part 'b.' ends with a dot or space: 'a/b.'"
},
{
"path": "a/b ",
"python": "error",
"python_error": "ManifestError: path part 'b ' ends with a dot or space: 'a/b '"
},
{
"path": "CON",
"python": "error",
"python_error": "ManifestError: path part 'CON' is a reserved Windows device name: 'CON'"
},
{
"path": "con",
"python": "error",
"python_error": "ManifestError: path part 'con' is a reserved Windows device name: 'con'"
},
{
"path": "a/CoN.TxT",
"python": "error",
"python_error": "ManifestError: path part 'CoN.TxT' is a reserved Windows device name: 'a/CoN.TxT'"
},
{
"path": "a/aux.txt",
"python": "error",
"python_error": "ManifestError: path part 'aux.txt' is a reserved Windows device name: 'a/aux.txt'"
},
{
"path": "a/Lpt1.log",
"python": "error",
"python_error": "ManifestError: path part 'Lpt1.log' is a reserved Windows device name: 'a/Lpt1.log'"
},
{
"path": "NUL.tar.gz",
"python": "error",
"python_error": "ManifestError: path part 'NUL.tar.gz' is a reserved Windows device name: 'NUL.tar.gz'"
},
{
"path": "a/nul..x",
"python": "error",
"python_error": "ManifestError: path part 'nul..x' is a reserved Windows device name: 'a/nul..x'"
},
{
"path": "a/prn",
"python": "error",
"python_error": "ManifestError: path part 'prn' is a reserved Windows device name: 'a/prn'"
},
{
"path": "a/prn_x",
"python": "ok",
"python_error": ""
},
{
"path": "a/com\u00b9",
"python": "error",
"python_error": "ManifestError: path part 'com\u00b9' is a reserved Windows device name: 'a/com\u00b9'"
},
{
"path": "a/COM\u00b2.txt",
"python": "error",
"python_error": "ManifestError: path part 'COM\u00b2.txt' is a reserved Windows device name: 'a/COM\u00b2.txt'"
},
{
"path": "a/lpt\u00b3",
"python": "error",
"python_error": "ManifestError: path part 'lpt\u00b3' is a reserved Windows device name: 'a/lpt\u00b3'"
},
{
"path": "a/lpt0",
"python": "error",
"python_error": "ManifestError: path part 'lpt0' is a reserved Windows device name: 'a/lpt0'"
},
{
"path": "a/com0",
"python": "error",
"python_error": "ManifestError: path part 'com0' is a reserved Windows device name: 'a/com0'"
},
{
"path": "a/comA",
"python": "ok",
"python_error": ""
},
{
"path": "a/com10",
"python": "ok",
"python_error": ""
},
{
"path": "a/con .txt",
"python": "ok",
"python_error": ""
},
{
"path": "a/b\u0000c",
"python": "error",
"python_error": "ManifestError: path part 'b\\x00c' holds a control character or one of <>:\"|?*: 'a/b\\x00c'"
},
{
"path": "a/b\nc",
"python": "error",
"python_error": "ManifestError: path part 'b\\nc' holds a control character or one of <>:\"|?*: 'a/b\\nc'"
},
{
"path": "a/b\u001fc",
"python": "error",
"python_error": "ManifestError: path part 'b\\x1fc' holds a control character or one of <>:\"|?*: 'a/b\\x1fc'"
},
{
"path": "a/b\u007fc",
"python": "ok",
"python_error": ""
},
{
"path": "a/b\u0085c",
"python": "ok",
"python_error": ""
},
{
"path": "a/b\u2028c",
"python": "ok",
"python_error": ""
},
{
"path": "a/b?c",
"python": "error",
"python_error": "ManifestError: path part 'b?c' holds a control character or one of <>:\"|?*: 'a/b?c'"
},
{
"path": "a/b*c",
"python": "error",
"python_error": "ManifestError: path part 'b*c' holds a control character or one of <>:\"|?*: 'a/b*c'"
},
{
"path": "a/b\"c",
"python": "error",
"python_error": "ManifestError: path part 'b\"c' holds a control character or one of <>:\"|?*: 'a/b\"c'"
},
{
"path": "a/b|c",
"python": "error",
"python_error": "ManifestError: path part 'b|c' holds a control character or one of <>:\"|?*: 'a/b|c'"
},
{
"path": "a/b<c",
"python": "error",
"python_error": "ManifestError: path part 'b<c' holds a control character or one of <>:\"|?*: 'a/b<c'"
},
{
"path": "a/b>c",
"python": "error",
"python_error": "ManifestError: path part 'b>c' holds a control character or one of <>:\"|?*: 'a/b>c'"
},
{
"path": "a/console.txt",
"python": "ok",
"python_error": ""
},
{
"path": "a/auxiliary",
"python": "ok",
"python_error": ""
},
{
"path": "a/.hidden",
"python": "ok",
"python_error": ""
},
{
"path": "a/b c.txt",
"python": "ok",
"python_error": ""
},
{
"path": " a/b",
"python": "ok",
"python_error": ""
},
{
"path": "a/ b",
"python": "ok",
"python_error": ""
},
{
"path": "a/b.c.",
"python": "error",
"python_error": "ManifestError: path part 'b.c.' ends with a dot or space: 'a/b.c.'"
},
{
"path": "donn\u00e9es/\u00e9t\u00e9.png",
"python": "ok",
"python_error": ""
},
{
"path": "\u4e2d\u6587/\u8def\u5f84.txt",
"python": "ok",
"python_error": ""
},
{
"path": "a/\ud83d\ude00.png",
"python": "ok",
"python_error": ""
},
{
"path": "a/b#c%20d",
"python": "ok",
"python_error": ""
},
{
"path": "a/aux\u00a0",
"python": "ok",
"python_error": ""
},
{
"path": "a/com\u0660",
"python": "ok",
"python_error": ""
},
{
"path": "a/\u212aon",
"python": "ok",
"python_error": ""
}
]
}