aboutsummaryrefslogtreecommitdiffstats
path: root/spec/tests
diff options
context:
space:
mode:
Diffstat (limited to 'spec/tests')
-rw-r--r--spec/tests/cases.json780
1 files changed, 780 insertions, 0 deletions
diff --git a/spec/tests/cases.json b/spec/tests/cases.json
new file mode 100644
index 0000000..d27976f
--- /dev/null
+++ b/spec/tests/cases.json
@@ -0,0 +1,780 @@
+{
+ "_doc": "UGI test cases. Each case has a URI, its equivalent block, and the expected decoded fields. All derived from ugi_registry_v0.json.",
+
+ "cases": [
+
+ {
+ "id": "minimal",
+ "description": "Minimum valid UGI: handle + mandatory geek field, single domain",
+ "uri": "ugi:0@min:gcs",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @min Gcs\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "min",
+ "fields": {
+ "g": { "type": "special", "domains": [{"id": "cs", "name": "Computer Science", "paid": false}] }
+ }
+ }
+ },
+
+ {
+ "id": "minimal_paid_geek",
+ "description": "Single paid geek domain",
+ "uri": "ugi:0@dev:gcs$",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @dev Gcs$\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "dev",
+ "fields": {
+ "g": { "type": "special", "domains": [{"id": "cs", "name": "Computer Science", "paid": true}] }
+ }
+ }
+ },
+
+ {
+ "id": "geek_multi_domain",
+ "description": "Multiple geek domains, one paid",
+ "uri": "ugi:0@alice:gcs$/ai/wr",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @alice Gcs$/ai/wr\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "alice",
+ "fields": {
+ "g": { "type": "special", "domains": [
+ {"id": "cs", "name": "Computer Science", "paid": true},
+ {"id": "ai", "name": "Artificial Intelligence", "paid": false},
+ {"id": "wr", "name": "Writing", "paid": false}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "geek_custom_domain",
+ "description": "Geek field with custom ~domain",
+ "uri": "ugi:0@bob:gcs/~fermenting",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @bob Gcs/~fermenting\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "bob",
+ "fields": {
+ "g": { "type": "special", "domains": [
+ {"id": "cs", "name": "Computer Science", "paid": false},
+ {"id": "~fermenting", "name": "~fermenting", "paid": false}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "geek_paid_and_custom",
+ "description": "Geek: paid domain + custom domain",
+ "uri": "ugi:0@chef:gfd$/~sourdough",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @chef Gfd$/~sourdough\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "chef",
+ "fields": {
+ "g": { "type": "special", "domains": [
+ {"id": "fd", "name": "Food Science", "paid": true},
+ {"id": "~sourdough", "name": "~sourdough", "paid": false}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "version_with_revision",
+ "description": "Version with revision number",
+ "uri": "ugi:0/3@rev:gcs",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0/3 @rev Gcs\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0/3",
+ "handle": "rev",
+ "fields": {
+ "g": { "type": "special", "domains": [{"id": "cs", "name": "Computer Science", "paid": false}] }
+ }
+ }
+ },
+
+ {
+ "id": "direct_no_modifiers",
+ "description": "Direct field with no modifiers (age: no $, no +, no /)",
+ "uri": "ugi:0@t1:gcs,a4",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t1 Gcs\nA4\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t1",
+ "fields": {
+ "g": { "type": "special", "domains": [{"id": "cs", "name": "Computer Science", "paid": false}] },
+ "a": { "type": "direct", "value": 4, "label": "25-34" }
+ }
+ }
+ },
+
+ {
+ "id": "direct_all_values",
+ "description": "Direct field at each scale extreme: age 0 and age 7",
+ "uri_0": "ugi:0@kid:gcs,a0",
+ "uri_7": "ugi:0@elder:gcs,a7",
+ "decoded_0": { "a": { "value": 0, "label": "Under 10" } },
+ "decoded_7": { "a": { "value": 7, "label": "65+" } }
+ },
+
+ {
+ "id": "direct_alternative",
+ "description": "Direct field with / alternative (clothing: c3/6)",
+ "uri": "ugi:0@t2:gcs,c3/6",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t2 Gcs\nC3/6\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t2",
+ "fields": {
+ "c": { "type": "direct", "value": 3, "label": "Jeans & tee", "alt_value": 6, "alt_label": "Formal" }
+ }
+ }
+ },
+
+ {
+ "id": "direct_paid",
+ "description": "Direct field with $ paid modifier (food: f5$)",
+ "uri": "ugi:0@t3:gcs,f5$",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t3 Gcs\nF5$\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t3",
+ "fields": {
+ "f": { "type": "direct", "value": 5, "label": "Experiments", "paid": true }
+ }
+ }
+ },
+
+ {
+ "id": "direct_aspire",
+ "description": "Direct field with +N aspire modifier (education: e4+6)",
+ "uri": "ugi:0@t4:gcs,e4+6",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t4 Gcs\nE4+6\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t4",
+ "fields": {
+ "e": { "type": "direct", "value": 4, "label": "Bachelors", "aspire": 6 }
+ }
+ }
+ },
+
+ {
+ "id": "direct_paid_aspire",
+ "description": "Direct field with both $ and +N (hardware: w5$+7)",
+ "uri": "ugi:0@t5:gcs,w5$+7",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t5 Gcs\nW5$+7\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t5",
+ "fields": {
+ "w": { "type": "direct", "value": 5, "label": "Comfortable", "paid": true, "aspire": 7 }
+ }
+ }
+ },
+
+ {
+ "id": "direct_alt_and_aspire",
+ "description": "Direct field with / alternative and +N aspire (security: q3/6+7)",
+ "uri": "ugi:0@t6:gcs,q3/6+7",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t6 Gcs\nQ3/6+7\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t6",
+ "fields": {
+ "q": { "type": "direct", "value": 3, "label": "Basic awareness", "alt_value": 6, "alt_label": "Encrypts everything", "aspire": 7 }
+ }
+ }
+ },
+
+ {
+ "id": "direct_all_three_modifiers",
+ "description": "Direct field with $, /, and + (security: q5$/6+7 — paid, fluctuates, aspires)",
+ "uri": "ugi:0@t6b:gcs,q5$/6+7",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t6b Gcs\nQ5$/6+7\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t6b",
+ "fields": {
+ "q": { "type": "direct", "value": 5, "label": "2FA everywhere", "paid": true, "alt_value": 6, "alt_label": "Encrypts everything", "aspire": 7 }
+ }
+ }
+ },
+
+ {
+ "id": "special_build",
+ "description": "Build field: height/width",
+ "uri": "ugi:0@t7:gcs,b6/3",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t7 Gcs\nB6/3\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t7",
+ "fields": {
+ "b": { "type": "special", "dimensions": {"height": {"value": 6, "label": "Tall"}, "width": {"value": 3, "label": "Below average"}} }
+ }
+ }
+ },
+
+ {
+ "id": "special_build_extremes",
+ "description": "Build field at extremes: b0/0 and b7/7",
+ "uri_min": "ugi:0@tiny:gcs,b0/0",
+ "uri_max": "ugi:0@huge:gcs,b7/7",
+ "decoded_min": { "b": { "dimensions": {"height": {"value": 0, "label": "Extremely short"}, "width": {"value": 0, "label": "Extremely thin"}} } },
+ "decoded_max": { "b": { "dimensions": {"height": {"value": 7, "label": "Extremely tall"}, "width": {"value": 7, "label": "Extremely broad"}} } }
+ },
+
+ {
+ "id": "special_politics",
+ "description": "Politics field: social/economic",
+ "uri": "ugi:0@t8:gcs,v5/3",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t8 Gcs\nV5/3\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t8",
+ "fields": {
+ "v": { "type": "special", "dimensions": {"social": {"value": 5, "label": "Center-left"}, "economic": {"value": 3, "label": "Center-right"}} }
+ }
+ }
+ },
+
+ {
+ "id": "special_politics_extremes",
+ "description": "Politics at extremes: v0/0 and v7/7",
+ "uri_min": "ugi:0@auth:gcs,v0/0",
+ "uri_max": "ugi:0@lib:gcs,v7/7",
+ "decoded_min": { "v": { "dimensions": {"social": {"value": 0, "label": "Far-right authoritarian"}, "economic": {"value": 0, "label": "Unregulated capitalism"}} } },
+ "decoded_max": { "v": { "dimensions": {"social": {"value": 7, "label": "Far-left libertarian"}, "economic": {"value": 7, "label": "Full socialism"}} } }
+ },
+
+ {
+ "id": "multi_single_subid",
+ "description": "Multi field with one sub-ID (programming: ppy6)",
+ "uri": "ugi:0@t9:gcs,ppy6",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t9 Gcs\nPpy6\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t9",
+ "fields": {
+ "p": { "type": "multi", "entries": [
+ {"sub_id": "py", "name": "Python", "value": 6, "label": "Advanced / daily"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_merged_subids",
+ "description": "Multi field with multiple sub-IDs merged in URI, expanded in block",
+ "uri": "ugi:0@t10:gcs,ppy6rs5js4",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t10 Gcs\nPpy6 Prs5 Pjs4\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t10",
+ "fields": {
+ "p": { "type": "multi", "entries": [
+ {"sub_id": "py", "name": "Python", "value": 6, "label": "Advanced / daily"},
+ {"sub_id": "rs", "name": "Rust", "value": 5, "label": "Competent"},
+ {"sub_id": "js", "name": "JavaScript", "value": 4, "label": "Average"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_paid_subid",
+ "description": "Multi field with $ on a sub-ID (programming: ppy6$)",
+ "uri": "ugi:0@t11:gcs,ppy6$",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t11 Gcs\nPpy6$\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t11",
+ "fields": {
+ "p": { "type": "multi", "entries": [
+ {"sub_id": "py", "name": "Python", "value": 6, "label": "Advanced / daily", "paid": true}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_aspire_subid",
+ "description": "Multi field with +N on a sub-ID (programming: prs4+6)",
+ "uri": "ugi:0@t12:gcs,prs4+6",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t12 Gcs\nPrs4+6\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t12",
+ "fields": {
+ "p": { "type": "multi", "entries": [
+ {"sub_id": "rs", "name": "Rust", "value": 4, "label": "Average", "aspire": 6}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_paid_aspire_subid",
+ "description": "Multi field with $+N combined on a sub-ID (programming: pjs5$+7)",
+ "uri": "ugi:0@t13:gcs,pjs5$+7",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t13 Gcs\nPjs5$+7\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t13",
+ "fields": {
+ "p": { "type": "multi", "entries": [
+ {"sub_id": "js", "name": "JavaScript", "value": 5, "label": "Competent", "paid": true, "aspire": 7}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_mixed_modifiers",
+ "description": "Multi field with different modifiers on different sub-IDs",
+ "uri": "ugi:0@t14:gcs,ppy7$rs5+7js6$+7go3",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t14 Gcs\nPpy7$ Prs5+7 Pjs6$+7 Pgo3\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t14",
+ "fields": {
+ "p": { "type": "multi", "entries": [
+ {"sub_id": "py", "name": "Python", "value": 7, "label": "Master / creator", "paid": true},
+ {"sub_id": "rs", "name": "Rust", "value": 5, "label": "Competent", "aspire": 7},
+ {"sub_id": "js", "name": "JavaScript", "value": 6, "label": "Advanced / daily", "paid": true, "aspire": 7},
+ {"sub_id": "go", "name": "Go", "value": 3, "label": "Beginner"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_custom_subid",
+ "description": "Multi field with custom ~sub-ID (music: m~synthwave6)",
+ "uri": "ugi:0@t15:gcs,m~synthwave6",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t15 Gcs\nM~synthwave6\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t15",
+ "fields": {
+ "m": { "type": "multi", "entries": [
+ {"sub_id": "~synthwave", "name": "~synthwave", "value": 6, "label": "Enthusiast"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_mixed_and_custom",
+ "description": "Multi field with known + custom sub-IDs (music: mrk6~synthwave7el5)",
+ "uri": "ugi:0@t16:gcs,mrk6~synthwave7el5",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t16 Gcs\nMrk6 M~synthwave7 Mel5\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t16",
+ "fields": {
+ "m": { "type": "multi", "entries": [
+ {"sub_id": "rk", "name": "Rock", "value": 6, "label": "Enthusiast"},
+ {"sub_id": "~synthwave", "name": "~synthwave", "value": 7, "label": "Life-defining"},
+ {"sub_id": "el", "name": "Electronic", "value": 5, "label": "Enjoy"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_grouped_subids",
+ "description": "Multi field with sub-IDs from sub_id_groups (gaming: jrp7pc6dn5)",
+ "uri": "ugi:0@t17:gcs,jrp7pc6dn5",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t17 Gcs\nJrp7 Jpc6 Jdn5\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t17",
+ "fields": {
+ "j": { "type": "multi", "entries": [
+ {"sub_id": "rp", "name": "RPG", "value": 7, "label": "Life-defining"},
+ {"sub_id": "pc", "name": "PC", "value": 6, "label": "Enthusiast"},
+ {"sub_id": "dn", "name": "D&D", "value": 5, "label": "Enjoy"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_1char_subid",
+ "description": "Multi field with 1-char sub-IDs (hair: hh4f6) and single-char sub-IDs (programming: pc5 — 'c' is 1-char)",
+ "uri": "ugi:0@t18:gcs,hh4f6,pc5",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t18 Gcs\nHh4 Hf6\nPc5\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t18",
+ "fields": {
+ "h": { "type": "multi", "entries": [
+ {"sub_id": "h", "name": "Head", "value": 4, "label": "Average"},
+ {"sub_id": "f", "name": "Face / beard", "value": 6, "label": "Impressive"}
+ ]},
+ "p": { "type": "multi", "entries": [
+ {"sub_id": "c", "name": "C", "value": 5, "label": "Competent"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_3char_subid",
+ "description": "Multi field with 3-char sub-ID from sub_id_groups (OS: oxsl5 — 'xsl' is Slackware)",
+ "uri": "ugi:0@t19:gcs,oxsl5",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t19 Gcs\nOxsl5\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t19",
+ "fields": {
+ "o": { "type": "multi", "entries": [
+ {"sub_id": "xsl", "name": "Slackware", "value": 5, "label": "Competent"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "single_type",
+ "description": "Single-type field: exactly one sub-ID + digit (religion: ris6)",
+ "uri": "ugi:0@t20:gcs,ris6",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t20 Gcs\nRis6\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t20",
+ "fields": {
+ "r": { "type": "single", "entries": [
+ {"sub_id": "is", "name": "Islam", "value": 6, "label": "Devout"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "single_type_atheist",
+ "description": "Single-type at extreme: rat0 (atheist, hostile to religion)",
+ "uri": "ugi:0@t21:gcs,rat0",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t21 Gcs\nRat0\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t21",
+ "fields": {
+ "r": { "type": "single", "entries": [
+ {"sub_id": "at", "name": "Atheist", "value": 0, "label": "Hostile"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "languages_basic",
+ "description": "Languages field: ISO 639-1 codes + ratings (multi with 2-char fixed sub-IDs)",
+ "uri": "ugi:0@t22:gcs,lar7en6",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t22 Gcs\nLar7 Len6\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t22",
+ "fields": {
+ "l": { "type": "multi", "entries": [
+ {"sub_id": "ar", "name": "Arabic", "value": 7, "label": "Native"},
+ {"sub_id": "en", "name": "English", "value": 6, "label": "Fluent"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "languages_with_modifiers",
+ "description": "Languages with $ and + modifiers",
+ "uri": "ugi:0@t23:gcs,lar7$en6de3+5",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t23 Gcs\nLar7$ Len6 Lde3+5\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t23",
+ "fields": {
+ "l": { "type": "multi", "entries": [
+ {"sub_id": "ar", "name": "Arabic", "value": 7, "label": "Native", "paid": true},
+ {"sub_id": "en", "name": "English", "value": 6, "label": "Fluent"},
+ {"sub_id": "de", "name": "German", "value": 3, "label": "Beginner", "aspire": 5}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "multi_os_grouped",
+ "description": "OS field with sub-IDs from multiple groups (linux + bsd + windows)",
+ "uri": "ugi:0@t24:gcs,oxa7$fb5we3",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t24 Gcs\nOxa7$ Ofb5 Owe3\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t24",
+ "fields": {
+ "o": { "type": "multi", "entries": [
+ {"sub_id": "xa", "name": "Arch", "value": 7, "label": "Master / creator", "paid": true},
+ {"sub_id": "fb", "name": "FreeBSD", "value": 5, "label": "Competent"},
+ {"sub_id": "we", "name": "Windows 11", "value": 3, "label": "Beginner"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "editor_with_aspire",
+ "description": "Editor field with aspire modifier (dvi7em3+6)",
+ "uri": "ugi:0@t25:gcs,dvi7em3+6",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t25 Gcs\nDvi7 Dem3+6\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t25",
+ "fields": {
+ "d": { "type": "multi", "entries": [
+ {"sub_id": "vi", "name": "Vim / Neovim", "value": 7, "label": "Master / creator"},
+ {"sub_id": "em", "name": "Emacs", "value": 3, "label": "Beginner", "aspire": 6}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "hair_custom_scale",
+ "description": "Hair field uses custom scale_labels (hh5f7b3)",
+ "uri": "ugi:0@t26:gcs,hh5f7b3",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t26 Gcs\nHh5 Hf7 Hb3\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t26",
+ "fields": {
+ "h": { "type": "multi", "entries": [
+ {"sub_id": "h", "name": "Head", "value": 5, "label": "Above average"},
+ {"sub_id": "f", "name": "Face / beard", "value": 7, "label": "Sasquatch"},
+ {"sub_id": "b", "name": "Brows", "value": 3, "label": "Below average"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "comics_enthusiasm_scale",
+ "description": "Comics field uses global enthusiasm scale (xxk7dc0)",
+ "uri": "ugi:0@t27:gcs,xxk7dc0",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t27 Gcs\nXxk7 Xdc0\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t27",
+ "fields": {
+ "x": { "type": "multi", "entries": [
+ {"sub_id": "xk", "name": "XKCD", "value": 7, "label": "Life-defining"},
+ {"sub_id": "dc", "name": "DC Comics", "value": 0, "label": "Despise"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "tv_grouped_subids",
+ "description": "TV field with sub-IDs from different groups (scifi + fantasy + other)",
+ "uri": "ugi:0@t28:gcs,tst7go5mr6",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t28 Gcs\nTst7 Tgo5 Tmr6\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t28",
+ "fields": {
+ "t": { "type": "multi", "entries": [
+ {"sub_id": "st", "name": "Star Trek", "value": 7, "label": "Life-defining"},
+ {"sub_id": "go", "name": "Game of Thrones", "value": 5, "label": "Enjoy"},
+ {"sub_id": "mr", "name": "Mr. Robot", "value": 6, "label": "Enthusiast"}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "gaming_paid_aspire",
+ "description": "Gaming with paid and aspire modifiers on different entries (jrp7$pc6st4+6)",
+ "uri": "ugi:0@t29:gcs,jrp7$pc6st4+6",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @t29 Gcs\nJrp7$ Jpc6 Jst4+6\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "t29",
+ "fields": {
+ "j": { "type": "multi", "entries": [
+ {"sub_id": "rp", "name": "RPG", "value": 7, "label": "Life-defining", "paid": true},
+ {"sub_id": "pc", "name": "PC", "value": 6, "label": "Enthusiast"},
+ {"sub_id": "st", "name": "Strategy", "value": 4, "label": "Take or leave", "aspire": 6}
+ ]}
+ }
+ }
+ },
+
+ {
+ "id": "all_direct_fields",
+ "description": "Every direct-type field at once",
+ "uri": "ugi:0@full:gcs,a4,c3,e5,f4,i5,k6,q4,s6,w5,y4,z3",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @full Gcs\nA4 E5\nC3\nW5 Q4\nI5\nK6\nS6 Y4 F4 Z3\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "full",
+ "fields": {
+ "a": { "type": "direct", "value": 4, "label": "25-34" },
+ "c": { "type": "direct", "value": 3, "label": "Jeans & tee" },
+ "e": { "type": "direct", "value": 5, "label": "Masters" },
+ "f": { "type": "direct", "value": 4, "label": "Home cook" },
+ "i": { "type": "direct", "value": 5, "label": "Positive" },
+ "k": { "type": "direct", "value": 6, "label": "Avid" },
+ "q": { "type": "direct", "value": 4, "label": "Password manager" },
+ "s": { "type": "direct", "value": 6, "label": "Partnered" },
+ "w": { "type": "direct", "value": 5, "label": "Comfortable" },
+ "y": { "type": "direct", "value": 4, "label": "Some exercise" },
+ "z": { "type": "direct", "value": 3, "label": "Handy" }
+ }
+ }
+ },
+
+ {
+ "id": "spec_example_jdoe",
+ "description": "Full example from spec: jdoe full-stack developer",
+ "uri": "ugi:0@jdoe:gcs$/dev,a4,b5/4,c3,hh4f5m4,e4,len7,oxa6we5,ppy6$js6$ts5rs4+6,dvs6,w5,q4,i5,v5/4,rag4,tst5ex7,k5,xxk6,jst5pc6,mrk5in4,s6,y4,f4,z3",
+ "block": "------- BEGIN UGI BLOCK -------\nv:0 @jdoe Gcs$/dev\nA4 E4 Len7\nB5/4 C3 Hh4 Hf5 Hm4\nOxa6 Owe5 Ppy6$ Pjs6$ Pts5 Prs4+6 Dvs6 W5 Q4\nI5 V5/4 Rag4\nTst5 Tex7 K5 Xxk6 Jst5 Jpc6 Mrk5 Min4\nS6 Y4 F4 Z3\n-------- END UGI BLOCK --------",
+ "decoded": {
+ "version": "0",
+ "handle": "jdoe",
+ "fields": {
+ "g": { "type": "special", "domains": [
+ {"id": "cs", "name": "Computer Science", "paid": true},
+ {"id": "dev", "name": "dev", "paid": false}
+ ]},
+ "a": { "type": "direct", "value": 4, "label": "25-34" },
+ "b": { "type": "special", "dimensions": {"height": {"value": 5, "label": "Above average"}, "width": {"value": 4, "label": "Average"}} },
+ "c": { "type": "direct", "value": 3, "label": "Jeans & tee" },
+ "h": { "type": "multi", "entries": [
+ {"sub_id": "h", "name": "Head", "value": 4, "label": "Average"},
+ {"sub_id": "f", "name": "Face / beard", "value": 5, "label": "Above average"},
+ {"sub_id": "m", "name": "Mustache", "value": 4, "label": "Average"}
+ ]},
+ "e": { "type": "direct", "value": 4, "label": "Bachelors" },
+ "l": { "type": "multi", "entries": [
+ {"sub_id": "en", "name": "English", "value": 7, "label": "Native"}
+ ]},
+ "o": { "type": "multi", "entries": [
+ {"sub_id": "xa", "name": "Arch", "value": 6, "label": "Advanced / daily"},
+ {"sub_id": "we", "name": "Windows 11", "value": 5, "label": "Competent"}
+ ]},
+ "p": { "type": "multi", "entries": [
+ {"sub_id": "py", "name": "Python", "value": 6, "label": "Advanced / daily", "paid": true},
+ {"sub_id": "js", "name": "JavaScript", "value": 6, "label": "Advanced / daily", "paid": true},
+ {"sub_id": "ts", "name": "TypeScript", "value": 5, "label": "Competent"},
+ {"sub_id": "rs", "name": "Rust", "value": 4, "label": "Average", "aspire": 6}
+ ]},
+ "d": { "type": "multi", "entries": [
+ {"sub_id": "vs", "name": "VS Code", "value": 6, "label": "Advanced / daily"}
+ ]},
+ "w": { "type": "direct", "value": 5, "label": "Comfortable" },
+ "q": { "type": "direct", "value": 4, "label": "Password manager" },
+ "i": { "type": "direct", "value": 5, "label": "Positive" },
+ "v": { "type": "special", "dimensions": {"social": {"value": 5, "label": "Center-left"}, "economic": {"value": 4, "label": "Mixed economy"}} },
+ "r": { "type": "single", "entries": [
+ {"sub_id": "ag", "name": "Agnostic", "value": 4, "label": "Cultural"}
+ ]},
+ "t": { "type": "multi", "entries": [
+ {"sub_id": "st", "name": "Star Trek", "value": 5, "label": "Enjoy"},
+ {"sub_id": "ex", "name": "Expanse", "value": 7, "label": "Life-defining"}
+ ]},
+ "k": { "type": "direct", "value": 5, "label": "Regular" },
+ "x": { "type": "multi", "entries": [
+ {"sub_id": "xk", "name": "XKCD", "value": 6, "label": "Enthusiast"}
+ ]},
+ "j": { "type": "multi", "entries": [
+ {"sub_id": "st", "name": "Strategy", "value": 5, "label": "Enjoy"},
+ {"sub_id": "pc", "name": "PC", "value": 6, "label": "Enthusiast"}
+ ]},
+ "m": { "type": "multi", "entries": [
+ {"sub_id": "rk", "name": "Rock", "value": 5, "label": "Enjoy"},
+ {"sub_id": "in", "name": "Indie", "value": 4, "label": "Take or leave"}
+ ]},
+ "s": { "type": "direct", "value": 6, "label": "Partnered" },
+ "y": { "type": "direct", "value": 4, "label": "Some exercise" },
+ "f": { "type": "direct", "value": 4, "label": "Home cook" },
+ "z": { "type": "direct", "value": 3, "label": "Handy" }
+ }
+ }
+ },
+
+ {
+ "id": "spec_example_hax0r",
+ "description": "Full example from spec: hax0r hardware hacker with version/revision",
+ "uri": "ugi:0/3@hax0r:gee$/rb/dy~solder,a5,b6/5,c2,hh3f6+7m5,e4,lja7en5,oxg7fb5,pc5ba6as7$,dem5,w7$,q6,i2,v3/3,rbu5,tbb6ff7,k5,xxk6dl5,jre7pc6bg5,mmt7pk6,s3,y5,f4,z7$",
+ "decoded": {
+ "version": "0/3",
+ "handle": "hax0r",
+ "fields": {
+ "g": { "type": "special", "domains": [
+ {"id": "ee", "name": "Electrical Eng.", "paid": true},
+ {"id": "rb", "name": "Robotics", "paid": false},
+ {"id": "dy~solder", "name": "dy~solder", "paid": false}
+ ]},
+ "a": { "type": "direct", "value": 5, "label": "35-49" },
+ "b": { "type": "special", "dimensions": {"height": {"value": 6, "label": "Tall"}, "width": {"value": 5, "label": "Above average"}} },
+ "c": { "type": "direct", "value": 2, "label": "Political tees" },
+ "h": { "type": "multi", "entries": [
+ {"sub_id": "h", "name": "Head", "value": 3, "label": "Below average"},
+ {"sub_id": "f", "name": "Face / beard", "value": 6, "label": "Impressive", "aspire": 7},
+ {"sub_id": "m", "name": "Mustache", "value": 5, "label": "Above average"}
+ ]},
+ "e": { "type": "direct", "value": 4, "label": "Bachelors" },
+ "l": { "type": "multi", "entries": [
+ {"sub_id": "ja", "name": "Japanese", "value": 7, "label": "Native"},
+ {"sub_id": "en", "name": "English", "value": 5, "label": "Proficient"}
+ ]},
+ "o": { "type": "multi", "entries": [
+ {"sub_id": "xg", "name": "Gentoo", "value": 7, "label": "Master / creator"},
+ {"sub_id": "fb", "name": "FreeBSD", "value": 5, "label": "Competent"}
+ ]},
+ "p": { "type": "multi", "entries": [
+ {"sub_id": "c", "name": "C", "value": 5, "label": "Competent"},
+ {"sub_id": "ba", "name": "Bash", "value": 6, "label": "Advanced / daily"},
+ {"sub_id": "as", "name": "Assembly", "value": 7, "label": "Master / creator", "paid": true}
+ ]},
+ "d": { "type": "multi", "entries": [
+ {"sub_id": "em", "name": "Emacs", "value": 5, "label": "Competent"}
+ ]},
+ "w": { "type": "direct", "value": 7, "label": "Builds everything", "paid": true },
+ "q": { "type": "direct", "value": 6, "label": "Encrypts everything" },
+ "i": { "type": "direct", "value": 2, "label": "Skeptical" },
+ "v": { "type": "special", "dimensions": {"social": {"value": 3, "label": "Center-right"}, "economic": {"value": 3, "label": "Center-right"}} },
+ "r": { "type": "single", "entries": [
+ {"sub_id": "bu", "name": "Buddhist", "value": 5, "label": "Moderate"}
+ ]},
+ "t": { "type": "multi", "entries": [
+ {"sub_id": "bb", "name": "Babylon 5", "value": 6, "label": "Enthusiast"},
+ {"sub_id": "ff", "name": "Firefly", "value": 7, "label": "Life-defining"}
+ ]},
+ "k": { "type": "direct", "value": 5, "label": "Regular" },
+ "x": { "type": "multi", "entries": [
+ {"sub_id": "xk", "name": "XKCD", "value": 6, "label": "Enthusiast"},
+ {"sub_id": "dl", "name": "Dilbert", "value": 5, "label": "Enjoy"}
+ ]},
+ "j": { "type": "multi", "entries": [
+ {"sub_id": "re", "name": "Retro", "value": 7, "label": "Life-defining"},
+ {"sub_id": "pc", "name": "PC", "value": 6, "label": "Enthusiast"},
+ {"sub_id": "bg", "name": "Board games", "value": 5, "label": "Enjoy"}
+ ]},
+ "m": { "type": "multi", "entries": [
+ {"sub_id": "mt", "name": "Metal", "value": 7, "label": "Life-defining"},
+ {"sub_id": "pk", "name": "Punk", "value": 6, "label": "Enthusiast"}
+ ]},
+ "s": { "type": "direct", "value": 3, "label": "Complicated" },
+ "y": { "type": "direct", "value": 5, "label": "Regular workouts" },
+ "f": { "type": "direct", "value": 4, "label": "Home cook" },
+ "z": { "type": "direct", "value": 7, "label": "Built my house", "paid": true }
+ }
+ }
+ }
+ ]
+}