Files
ODIAN_Launcher/crates/odian-packs/tests/fixtures/canonical.json
T
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

212 lines
26 KiB
JSON

{
"cases": [
{
"name": "empty_object/ascii_escaped_reversed",
"input": "{}",
"canonical_hex": "7b7d"
},
{
"name": "empty_object/raw_utf8",
"input": "{}",
"canonical_hex": "7b7d"
},
{
"name": "empty_array/ascii_escaped_reversed",
"input": "[]",
"canonical_hex": "5b5d"
},
{
"name": "empty_array/raw_utf8",
"input": "[]",
"canonical_hex": "5b5d"
},
{
"name": "empty_string/ascii_escaped_reversed",
"input": "\"\"",
"canonical_hex": "2222"
},
{
"name": "empty_string/raw_utf8",
"input": "\"\"",
"canonical_hex": "2222"
},
{
"name": "null/ascii_escaped_reversed",
"input": "null",
"canonical_hex": "6e756c6c"
},
{
"name": "null/raw_utf8",
"input": "null",
"canonical_hex": "6e756c6c"
},
{
"name": "true/ascii_escaped_reversed",
"input": "true",
"canonical_hex": "74727565"
},
{
"name": "true/raw_utf8",
"input": "true",
"canonical_hex": "74727565"
},
{
"name": "false/ascii_escaped_reversed",
"input": "false",
"canonical_hex": "66616c7365"
},
{
"name": "false/raw_utf8",
"input": "false",
"canonical_hex": "66616c7365"
},
{
"name": "empty_containers_nested/ascii_escaped_reversed",
"input": "{\n \"d\": \"\",\n \"c\": [\n [],\n {}\n ],\n \"a\": {},\n \"b\": []\n}",
"canonical_hex": "7b2261223a7b7d2c2262223a5b5d2c2263223a5b5b5d2c7b7d5d2c2264223a22227d"
},
{
"name": "empty_containers_nested/raw_utf8",
"input": "{\"b\": [], \"a\": {}, \"c\": [[], {}], \"d\": \"\"}",
"canonical_hex": "7b2261223a7b7d2c2262223a5b5d2c2263223a5b5b5d2c7b7d5d2c2264223a22227d"
},
{
"name": "non_ascii/ascii_escaped_reversed",
"input": "{\n \"ru\": \"\\u041f\\u0440\\u0438\\u0432\\u0435\\u0442\",\n \"ar\": \"\\u0645\\u0631\\u062d\\u0628\\u0627\",\n \"zh\": \"\\u4e2d\\u6587\\u8def\\u5f84\",\n \"de\": \"Stra\\u00dfe\",\n \"fr\": \"donn\\u00e9es \\u00e9t\\u00e9 \\u00e0 No\\u00ebl\"\n}",
"canonical_hex": "7b226172223a22d985d8b1d8add8a8d8a7222c226465223a2253747261c39f65222c226672223a22646f6e6ec3a9657320c3a974c3a920c3a0204e6fc3ab6c222c227275223a22d09fd180d0b8d0b2d0b5d182222c227a68223a22e4b8ade69687e8b7afe5be84227d"
},
{
"name": "non_ascii/raw_utf8",
"input": "{\"fr\": \"donn\u00e9es \u00e9t\u00e9 \u00e0 No\u00ebl\", \"de\": \"Stra\u00dfe\", \"zh\": \"\u4e2d\u6587\u8def\u5f84\", \"ar\": \"\u0645\u0631\u062d\u0628\u0627\", \"ru\": \"\u041f\u0440\u0438\u0432\u0435\u0442\"}",
"canonical_hex": "7b226172223a22d985d8b1d8add8a8d8a7222c226465223a2253747261c39f65222c226672223a22646f6e6ec3a9657320c3a974c3a920c3a0204e6fc3ab6c222c227275223a22d09fd180d0b8d0b2d0b5d182222c227a68223a22e4b8ade69687e8b7afe5be84227d"
},
{
"name": "emoji/ascii_escaped_reversed",
"input": "{\n \"flag\": \"\\ud83c\\uddeb\\ud83c\\uddf7\",\n \"emoji\": \"\\ud83d\\ude00\\ud83d\\ude80 and \\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67 zwj\"\n}",
"canonical_hex": "7b22656d6f6a69223a22f09f9880f09f9a8020616e6420f09f91a8e2808df09f91a9e2808df09f91a7207a776a222c22666c6167223a22f09f87abf09f87b7227d"
},
{
"name": "emoji/raw_utf8",
"input": "{\"emoji\": \"\ud83d\ude00\ud83d\ude80 and \ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67 zwj\", \"flag\": \"\ud83c\uddeb\ud83c\uddf7\"}",
"canonical_hex": "7b22656d6f6a69223a22f09f9880f09f9a8020616e6420f09f91a8e2808df09f91a9e2808df09f91a7207a776a222c22666c6167223a22f09f87abf09f87b7227d"
},
{
"name": "control_chars/ascii_escaped_reversed",
"input": "{\n \"all\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f\\u007f\\u0080\\u009f\\u2028\\u2029\"\n}",
"canonical_hex": "7b22616c6c223a225c75303030305c75303030315c75303030325c75303030335c75303030345c75303030355c75303030365c75303030375c625c745c6e5c75303030625c665c725c75303030655c75303030665c75303031305c75303031315c75303031325c75303031335c75303031345c75303031355c75303031365c75303031375c75303031385c75303031395c75303031615c75303031625c75303031635c75303031645c75303031655c75303031667fc280c29fe280a8e280a9227d"
},
{
"name": "control_chars/raw_utf8",
"input": "{\"all\": \"\\u0000\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f\u007f\u0080\u009f\u2028\u2029\"}",
"canonical_hex": "7b22616c6c223a225c75303030305c75303030315c75303030325c75303030335c75303030345c75303030355c75303030365c75303030375c625c745c6e5c75303030625c665c725c75303030655c75303030665c75303031305c75303031315c75303031325c75303031335c75303031345c75303031355c75303031365c75303031375c75303031385c75303031395c75303031615c75303031625c75303031635c75303031645c75303031655c75303031667fc280c29fe280a8e280a9227d"
},
{
"name": "quotes_backslashes/ascii_escaped_reversed",
"input": "{\n \"mixed\": \"\\\\\\\"\\\\n/<>&'\",\n \"b\": \"C:\\\\Odian\\\\x\",\n \"q\": \"say \\\"hi\\\"\"\n}",
"canonical_hex": "7b2262223a22433a5c5c4f6469616e5c5c78222c226d69786564223a225c5c5c225c5c6e2f3c3e2627222c2271223a22736179205c2268695c22227d"
},
{
"name": "quotes_backslashes/raw_utf8",
"input": "{\"q\": \"say \\\"hi\\\"\", \"b\": \"C:\\\\Odian\\\\x\", \"mixed\": \"\\\\\\\"\\\\n/<>&'\"}",
"canonical_hex": "7b2262223a22433a5c5c4f6469616e5c5c78222c226d69786564223a225c5c5c225c5c6e2f3c3e2627222c2271223a22736179205c2268695c22227d"
},
{
"name": "key_order_code_points/ascii_escaped_reversed",
"input": "{\n \"\\u00ff\": 11,\n \"Z\": 10,\n \"\\uffff\": 9,\n \"a\\u0000\": 8,\n \"aa\": 7,\n \"\\u00e9\": 6,\n \"\": 5,\n \"B\": 4,\n \"a\": 3,\n \"\\ud83d\\ude00\": 2,\n \"\\ufb01\": 1\n}",
"canonical_hex": "7b22223a352c2242223a342c225a223a31302c2261223a332c22615c7530303030223a382c226161223a372c22c3a9223a362c22c3bf223a31312c22efac81223a312c22efbfbf223a392c22f09f9880223a327d"
},
{
"name": "key_order_code_points/raw_utf8",
"input": "{\"\ufb01\": 1, \"\ud83d\ude00\": 2, \"a\": 3, \"B\": 4, \"\": 5, \"\u00e9\": 6, \"aa\": 7, \"a\\u0000\": 8, \"\uffff\": 9, \"Z\": 10, \"\u00ff\": 11}",
"canonical_hex": "7b22223a352c2242223a342c225a223a31302c2261223a332c22615c7530303030223a382c226161223a372c22c3a9223a362c22c3bf223a31312c22efac81223a312c22efbfbf223a392c22f09f9880223a327d"
},
{
"name": "nested_sorting/ascii_escaped_reversed",
"input": "{\n \"m\": {\n \"k1\": 3,\n \"k2\": {\n \"a\": 2,\n \"b\": 1\n }\n },\n \"a\": [\n true,\n false,\n null,\n \"\",\n 0\n ],\n \"z\": {\n \"x\": null,\n \"y\": [\n {\n \"a\": {},\n \"b\": []\n },\n [],\n {}\n ]\n }\n}",
"canonical_hex": "7b2261223a5b747275652c66616c73652c6e756c6c2c22222c305d2c226d223a7b226b31223a332c226b32223a7b2261223a322c2262223a317d7d2c227a223a7b2278223a6e756c6c2c2279223a5b7b2261223a7b7d2c2262223a5b5d7d2c5b5d2c7b7d5d7d7d"
},
{
"name": "nested_sorting/raw_utf8",
"input": "{\"z\": {\"y\": [{\"b\": [], \"a\": {}}, [], {}], \"x\": null}, \"a\": [true, false, null, \"\", 0], \"m\": {\"k2\": {\"b\": 1, \"a\": 2}, \"k1\": 3}}",
"canonical_hex": "7b2261223a5b747275652c66616c73652c6e756c6c2c22222c305d2c226d223a7b226b31223a332c226b32223a7b2261223a322c2262223a317d7d2c227a223a7b2278223a6e756c6c2c2279223a5b7b2261223a7b7d2c2262223a5b5d7d2c5b5d2c7b7d5d7d7d"
},
{
"name": "big_ints/ascii_escaped_reversed",
"input": "{\n \"n\": [\n 0,\n -1,\n 1,\n 2147483648,\n 4294967296,\n 9007199254740992,\n 9007199254740993,\n 9223372036854775807,\n -9223372036854775808,\n 18446744073709551615,\n 2437523419\n ]\n}",
"canonical_hex": "7b226e223a5b302c2d312c312c323134373438333634382c343239343936373239362c393030373139393235343734303939322c393030373139393235343734303939332c393232333337323033363835343737353830372c2d393232333337323033363835343737353830382c31383434363734343037333730393535313631352c323433373532333431395d7d"
},
{
"name": "big_ints/raw_utf8",
"input": "{\"n\": [0, -1, 1, 2147483648, 4294967296, 9007199254740992, 9007199254740993, 9223372036854775807, -9223372036854775808, 18446744073709551615, 2437523419]}",
"canonical_hex": "7b226e223a5b302c2d312c312c323134373438333634382c343239343936373239362c393030373139393235343734303939322c393030373139393235343734303939332c393232333337323033363835343737353830372c2d393232333337323033363835343737353830382c31383434363734343037333730393535313631352c323433373532333431395d7d"
},
{
"name": "deep_nesting/ascii_escaped_reversed",
"input": "{\n \"k0\": [\n [\n {\n \"k1\": [\n [\n {\n \"k2\": [\n [\n {\n \"k0\": [\n [\n {\n \"k1\": [\n [\n {\n \"k2\": [\n [\n {\n \"k0\": [\n [\n {\n \"k1\": [\n [\n {\n \"k2\": [\n [\n {\n \"k0\": [\n [\n {\n \"k1\": [\n [\n {\n \"k2\": [\n [\n {\n \"k0\": [\n [\n {\n \"k1\": [\n [\n {\n \"k2\": [\n [\n {\n \"k0\": [\n [\n {\n \"k1\": [\n [\n {\n \"k2\": [\n [\n {\n \"k0\": [\n [\n {\n \"k1\": [\n [\n \"leaf\",\n {\n \"i\": 0\n }\n ],\n 1\n ]\n },\n {\n \"i\": 2\n }\n ],\n 3\n ]\n },\n {\n \"i\": 4\n }\n ],\n 5\n ]\n },\n {\n \"i\": 6\n }\n ],\n 7\n ]\n },\n {\n \"i\": 8\n }\n ],\n 9\n ]\n },\n {\n \"i\": 10\n }\n ],\n 11\n ]\n },\n {\n \"i\": 12\n }\n ],\n 13\n ]\n },\n {\n \"i\": 14\n }\n ],\n 15\n ]\n },\n {\n \"i\": 16\n }\n ],\n 17\n ]\n },\n {\n \"i\": 18\n }\n ],\n 19\n ]\n },\n {\n \"i\": 20\n }\n ],\n 21\n ]\n },\n {\n \"i\": 22\n }\n ],\n 23\n ]\n },\n {\n \"i\": 24\n }\n ],\n 25\n ]\n },\n {\n \"i\": 26\n }\n ],\n 27\n ]\n },\n {\n \"i\": 28\n }\n ],\n 29\n ]\n },\n {\n \"i\": 30\n }\n ],\n 31\n ]\n },\n {\n \"i\": 32\n }\n ],\n 33\n ]\n },\n {\n \"i\": 34\n }\n ],\n 35\n ]\n },\n {\n \"i\": 36\n }\n ],\n 37\n ]\n },\n {\n \"i\": 38\n }\n ],\n 39\n ]\n}",
"canonical_hex": "7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b226c656166222c7b2269223a307d5d2c315d7d2c7b2269223a327d5d2c335d7d2c7b2269223a347d5d2c355d7d2c7b2269223a367d5d2c375d7d2c7b2269223a387d5d2c395d7d2c7b2269223a31307d5d2c31315d7d2c7b2269223a31327d5d2c31335d7d2c7b2269223a31347d5d2c31355d7d2c7b2269223a31367d5d2c31375d7d2c7b2269223a31387d5d2c31395d7d2c7b2269223a32307d5d2c32315d7d2c7b2269223a32327d5d2c32335d7d2c7b2269223a32347d5d2c32355d7d2c7b2269223a32367d5d2c32375d7d2c7b2269223a32387d5d2c32395d7d2c7b2269223a33307d5d2c33315d7d2c7b2269223a33327d5d2c33335d7d2c7b2269223a33347d5d2c33355d7d2c7b2269223a33367d5d2c33375d7d2c7b2269223a33387d5d2c33395d7d"
},
{
"name": "deep_nesting/raw_utf8",
"input": "{\"k0\": [[{\"k1\": [[{\"k2\": [[{\"k0\": [[{\"k1\": [[{\"k2\": [[{\"k0\": [[{\"k1\": [[{\"k2\": [[{\"k0\": [[{\"k1\": [[{\"k2\": [[{\"k0\": [[{\"k1\": [[{\"k2\": [[{\"k0\": [[{\"k1\": [[{\"k2\": [[{\"k0\": [[{\"k1\": [[\"leaf\", {\"i\": 0}], 1]}, {\"i\": 2}], 3]}, {\"i\": 4}], 5]}, {\"i\": 6}], 7]}, {\"i\": 8}], 9]}, {\"i\": 10}], 11]}, {\"i\": 12}], 13]}, {\"i\": 14}], 15]}, {\"i\": 16}], 17]}, {\"i\": 18}], 19]}, {\"i\": 20}], 21]}, {\"i\": 22}], 23]}, {\"i\": 24}], 25]}, {\"i\": 26}], 27]}, {\"i\": 28}], 29]}, {\"i\": 30}], 31]}, {\"i\": 32}], 33]}, {\"i\": 34}], 35]}, {\"i\": 36}], 37]}, {\"i\": 38}], 39]}",
"canonical_hex": "7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b7b226b32223a5b5b7b226b30223a5b5b7b226b31223a5b5b226c656166222c7b2269223a307d5d2c315d7d2c7b2269223a327d5d2c335d7d2c7b2269223a347d5d2c355d7d2c7b2269223a367d5d2c375d7d2c7b2269223a387d5d2c395d7d2c7b2269223a31307d5d2c31315d7d2c7b2269223a31327d5d2c31335d7d2c7b2269223a31347d5d2c31355d7d2c7b2269223a31367d5d2c31375d7d2c7b2269223a31387d5d2c31395d7d2c7b2269223a32307d5d2c32315d7d2c7b2269223a32327d5d2c32335d7d2c7b2269223a32347d5d2c32355d7d2c7b2269223a32367d5d2c32375d7d2c7b2269223a32387d5d2c32395d7d2c7b2269223a33307d5d2c33315d7d2c7b2269223a33327d5d2c33335d7d2c7b2269223a33347d5d2c33355d7d2c7b2269223a33367d5d2c33375d7d2c7b2269223a33387d5d2c33395d7d"
},
{
"name": "minimal_manifest/ascii_escaped_reversed",
"input": "{\n \"app\": {\n \"files\": [\n {\n \"sha256\": \"9095bdb859308b62acf04036ffd4adfe366d7f737d276eb6c46ae434f3816c9b\",\n \"size\": 3,\n \"path\": \"Odian/Odian.exe\"\n }\n ]\n },\n \"released_at\": \"2026-09-15T12:00:00Z\",\n \"version\": \"0.51.0\",\n \"product\": \"odian\",\n \"schema\": 1\n}",
"canonical_hex": "7b22617070223a7b2266696c6573223a5b7b2270617468223a224f6469616e2f4f6469616e2e657865222c22736861323536223a2239303935626462383539333038623632616366303430333666666434616466653336366437663733376432373665623663343661653433346633383136633962222c2273697a65223a337d5d7d2c2270726f64756374223a226f6469616e222c2272656c65617365645f6174223a22323032362d30392d31355431323a30303a30305a222c22736368656d61223a312c2276657273696f6e223a22302e35312e30227d"
},
{
"name": "minimal_manifest/raw_utf8",
"input": "{\"schema\": 1, \"product\": \"odian\", \"version\": \"0.51.0\", \"released_at\": \"2026-09-15T12:00:00Z\", \"app\": {\"files\": [{\"path\": \"Odian/Odian.exe\", \"size\": 3, \"sha256\": \"9095bdb859308b62acf04036ffd4adfe366d7f737d276eb6c46ae434f3816c9b\"}]}}",
"canonical_hex": "7b22617070223a7b2266696c6573223a5b7b2270617468223a224f6469616e2f4f6469616e2e657865222c22736861323536223a2239303935626462383539333038623632616366303430333666666434616466653336366437663733376432373665623663343661653433346633383136633962222c2273697a65223a337d5d7d2c2270726f64756374223a226f6469616e222c2272656c65617365645f6174223a22323032362d30392d31355431323a30303a30305a222c22736368656d61223a312c2276657273696f6e223a22302e35312e30227d"
}
],
"rust_rejects": [
{
"name": "float",
"input": "1.5",
"python_canonical_hex": "312e35"
},
{
"name": "float_integral",
"input": "1.0",
"python_canonical_hex": "312e30"
},
{
"name": "exponent",
"input": "1e3",
"python_canonical_hex": "313030302e30"
},
{
"name": "negative_zero",
"input": "-0",
"python_canonical_hex": "30"
},
{
"name": "negative_zero_float",
"input": "-0.0",
"python_canonical_hex": "2d302e30"
},
{
"name": "above_u64",
"input": "18446744073709551616",
"python_canonical_hex": "3138343436373434303733373039353531363136"
},
{
"name": "below_i64",
"input": "-9223372036854775809",
"python_canonical_hex": "2d39323233333732303336383534373735383039"
},
{
"name": "float_in_object",
"input": "{\"a\": 2.5}",
"python_canonical_hex": "7b2261223a322e357d"
},
{
"name": "float_in_array",
"input": "[1, 0.1]",
"python_canonical_hex": "5b312c302e315d"
}
]
}