aboutsummaryrefslogtreecommitdiffstats
path: root/spec/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'spec/README.md')
-rw-r--r--spec/README.md894
1 files changed, 894 insertions, 0 deletions
diff --git a/spec/README.md b/spec/README.md
new file mode 100644
index 0000000..3cedcbb
--- /dev/null
+++ b/spec/README.md
@@ -0,0 +1,894 @@
+# UGI — Unified Geek Identifier
+
+**Version: 0 (Draft) · 2026-03-28 · MIT License**
+
+---
+## Overview
+
+A compact, URI-safe self-description code for geeks. Encodes identity, skills, interests, and opinions into a single string suitable for bios, email signatures, and URIs.
+
+It descends from two predecessors:
+
+- [Geek Code](https://sig.codes/geek/) by Robert A. Hayden (1993-1996), with its [Geek Code 4.0+](https://sig.codes/geek-4.0/) by exarobibliologist (2019-2026)
+- [Hacker Key](https://sig.codes/hacker-key/) by Chris Allegretta (2003-2006)
+
+UGI takes the cultural breadth of the Geek Code, the numeric compactness of the Hacker Key, and adds URI safety, modern fields, and extensibility.
+
+### Design goals
+
+1. Single-letter field codes — 24 active, 2 reserved
+2. Octal (0–7) rating scale
+3. URI-safe characters only — no percent-encoding needed
+4. Dual format — URI for machines, block for humans
+5. Case-insensitive
+6. Extensible via `~` custom sub-IDs
+
+---
+## Formats
+
+### URI
+
+```
+ugi:<version>[/<revision>]@<handle>:<field>,<field>,...
+```
+
+### Block
+
+```
+------- BEGIN UGI BLOCK -------
+v:<version>[/<revision>] @<handle> [G<geek_types>]
+<field> <field> ...
+-------- END UGI BLOCK --------
+```
+
+In block format, field codes are repeated per sub-ID for readability: `Ppy6 Prs5` instead of `ppy6rs5`. Long-form sub-ID aliases (noted in registries) are permitted in block format.
+
+### Conversion
+
+Block → URI: remove header/footer, merge repeated field codes, replace spaces with commas, prepend `ugi:`.
+
+URI → Block: split on commas, expand merged sub-IDs by repeating field codes, add header/footer.
+
+No modifier or character changes are needed — both formats use identical symbols.
+
+### Mandatory fields
+
+`@handle` and `g` (geek type) are required. All others are optional.
+
+---
+## Grammar
+
+```
+<field_code><sub_id><digit>[<modifier>]...
+```
+
+- **Field codes** — single letter (a–z), case-insensitive
+- **Sub-IDs** — 1–4 lowercase alpha chars
+- **Ratings** — single octal digit (0–7), required on every sub-ID
+- **Custom sub-IDs** — `~` prefix: `~fermenting5`
+- **Modifiers** — after the digit:
+ - `$` — paid
+ - `+` followed by digit — aspiring toward that level
+ - `$+` combined — paid and aspiring
+- **Alternatives** — `/` between two digits on direct-value fields: `c3/6`
+
+### Special formats
+
+| Field | Format | Example |
+|---|---|---|
+| `g` geek type | `/` separates domains, `~` for custom, `$` for paid, no ratings | `gcs$/ai/wr~fermenting` |
+| `b` build | `<height>/<width>` | `b6/3` |
+| `l` languages | ISO 639-1 code + rating | `lar7en6` |
+| `v` politics | `<social>/<economic>` | `v5/3` |
+
+### Parser algorithm
+
+After each comma or space, read a single letter (field code). Then:
+
+- `g` → read alpha tokens separated by `/` and `~`-prefixed tokens until delimiter
+- `b` → digit, `/`, digit
+- `v` → digit, `/`, digit
+- `l` → repeat: 2 alpha + digit + optional modifier
+- `r` → one sub-id + digit (single value only)
+- direct fields → digit + optional modifier
+- direct-alt fields → digit + optional `/` + digit + optional modifier
+- multi fields → repeat: alpha (sub-id) + digit + optional modifier
+
+---
+## Rating scale (0–7)
+
+| Value | General | Proficiency | Enthusiasm | Stance |
+|---|---|---|---|---|
+| 0 | Hostile / opposed | Can't, won't | Despise | Strongly against |
+| 1 | Strong dislike | Aware it exists | Avoid actively | Against |
+| 2 | Dislike / minimal | Dabbled briefly | Not interested | Lean against |
+| 3 | Slight negative | Beginner | Cold | Slightly against |
+| 4 | Baseline / neutral | Average | Take or leave | No opinion |
+| 5 | Moderate positive | Competent | Enjoy | Lean toward |
+| 6 | Strong positive | Advanced / daily | Enthusiast | Support |
+| 7 | Obsessed / defining | Master / creator | Life-defining | Evangelist |
+### Modifier permissions
+
+| Modifiers | Fields |
+|---|---|
+| `$` and `+` | `f` `j` `l` `o` `p` `q` `w` `y` `z` |
+| `$` only | `g` |
+| `+` only | `b` `c` `d` `e` `h` `k` `s` |
+| Neither | `a` `i` `m` `r` `t` `v` `x` |
+
+---
+## Field list
+
+| Code | Field | Type | Category |
+|---|---|---|---|
+| `a` | Age | Direct | Identity |
+| `b` | Build | Special (h/w) | Appearance |
+| `c` | Clothing | Direct, `/` ok | Appearance |
+| `d` | Editor / IDE | Multi | Tech |
+| `e` | Education | Direct | Identity |
+| `f` | Food / Cooking | Direct | Lifestyle |
+| `g` | Geek Specialization | Special | Identity |
+| `h` | Hair | Multi (1-letter) | Appearance |
+| `i` | AI Stance | Direct | Stance |
+| `j` | Gaming | Multi | Entertainment |
+| `k` | Books | Direct | Entertainment |
+| `l` | Spoken Languages | Multi (ISO) | Identity |
+| `m` | Music | Multi | Entertainment |
+| `n` | *(reserved)* | — | — |
+| `o` | Operating System | Multi | Tech |
+| `p` | Programming Languages | Multi | Tech |
+| `q` | Security / Hacking | Direct, `/` ok | Tech |
+| `r` | Religion | Single | Stance |
+| `s` | Sex / Relationships | Direct, `/` ok | Lifestyle |
+| `t` | TV / Film | Multi | Entertainment |
+| `u` | *(reserved)* | — | — |
+| `v` | Politics | Special (s/e) | Stance |
+| `w` | Hardware | Direct | Tech |
+| `x` | Comics / Manga | Multi | Entertainment |
+| `y` | Fitness | Direct | Lifestyle |
+| `z` | Maker / DIY | Direct | Lifestyle |
+
+---
+## Field definitions
+
+---
+
+### a — Age
+
+0. **Under 10** — Still loading. Baby Shark has more life experience.
+1. **10-14** — Old enough for Linux opinions, too young to drive to the meetup.
+2. **15-19** — Convinced you know everything. Might be right about the tech stuff.
+3. **20-24** — Student loans arrived but so has 3am pizza freedom.
+4. **25-34** — Peak earning-to-caring ratio. GitHub green, back complaining.
+5. **35-49** — You remember dial-up noises. Kids ask what a floppy disk is.
+6. **50-64** — You were there when it happened. All of it.
+7. **65+** — Living legend. Your software runs on OSes born decades after you.
+
+---
+
+### b — Build
+
+Format: `b<height>/<width>`. Each 0–7. 0 = extremely small, 4 = average, 7 = extremely large. `+` modifier permitted.
+
+**Height:** 0 = Extremely short · 1 = Very short · 2 = Short · 3 = Below average · 4 = Average · 5 = Above average · 6 = Tall · 7 = Extremely tall
+
+**Width:** 0 = Extremely thin · 1 = Very thin · 2 = Slim · 3 = Below average · 4 = Average · 5 = Above average · 6 = Broad · 7 = Extremely broad
+
+> `b6/3` — tall and slim.
+> `b4/4` — average. Chairs were designed for you.
+
+---
+
+### c — Clothing
+
+0. **Nudist** — Quite a fashion statement.
+1. **Punk** — Safety pins are load-bearing.
+2. **Political tees** — Your shirts have opinions so you don't have to.
+3. **Jeans & tee** — Universal geek uniform. You own seven identical shirts.
+4. **Average** — Inoffensive. Forgettable. Exactly as intended.
+5. **Smart casual** — You've mastered the blazer-over-tee.
+6. **Formal** — You iron things. On purpose.
+7. **Suit daily** — CEO, lawyer, or cosplaying as one.
+
+---
+
+### d — Editor / IDE
+
+The editor holy war, now quantified.
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `vi` | `(vim)` | Vim / Neovim | `em` | `(emacs)` | Emacs |
+| `vs` | `(vscode)` | VS Code | `ij` | `(idea)` | IntelliJ / JetBrains |
+| `xc` | `(xcode)` | Xcode | `vt` | `(vstudio)` | Visual Studio |
+| `ed` | — | ed | `na` | `(nano)` | nano / pico |
+| `su` | `(sublime)` | Sublime Text | `ec` | `(eclipse)` | Eclipse |
+| `np` | `(npp)` | Notepad++ | `hx` | `(helix)` | Helix |
+| `ze` | `(zed)` | Zed | `ka` | `(kakoune)` | Kakoune |
+| `lp` | `(lapce)` | Lapce | `at` | `(atom)` | Atom |
+| `nv` | `(nvchad)` | NvChad / LazyVim | | | |
+
+Scale: **proficiency** (see global scale table).
+
+> 0: Opened it by accident, couldn't close it.
+> 7: The editor is an extension of my nervous system.
+
+---
+
+### e — Education
+
+0. **None / primary** — School of life. And YouTube.
+1. **Middle school** — Survived. Emotionally, jury's still out.
+2. **High school** — They said best years. They lied.
+3. **Trade / associates** — You can actually do things, unlike philosophy majors.
+4. **Bachelors** — Four years and paper that cost more than your car.
+5. **Masters** — First degree wasn't enough to convince anyone.
+6. **PhD** — Call me Doctor. Especially at parties.
+7. **Post-doc** — Forgotten what sunlight looks like.
+
+---
+
+### f — Food / Cooking
+
+0. **Microwave only** — Smoke detector is your kitchen timer.
+1. **Boils water** — Sometimes remembers to turn off stove.
+2. **Basic meals** — Eggs and pasta. The two food groups.
+3. **Follows recipes** — To the letter. Substitution is heresy.
+4. **Home cook** — Friends don't dread your dinner invitations.
+5. **Experiments** — Sometimes works. You pretend you planned it.
+6. **Hosts dinners** — Spice rack has subdivisions.
+7. **Chef level** — Own a mandoline, all fingers intact.
+
+---
+
+### g — Geek Specialization
+
+Mandatory. `/` separates domains. `~` prefixes custom domains. `$` after a domain = paid. No ratings.
+
+#### Computing & Tech
+
+| Code | Domain | Code | Domain |
+|---|---|---|---|
+| `cs` | Computer Science | `ai` | Artificial Intelligence |
+| `ml` | Machine Learning | `cy` | Cybersecurity |
+| `ds` | Data Science | `bc` | Blockchain |
+| `io` | Internet of Things | `qc` | Quantum Computing |
+| `vr` | Virtual Reality | `os` | Operating Systems |
+| `dv` | DevOps | `ap` | API Development |
+| `cl` | Cloud Infrastructure | `eg` | Edge Computing |
+| `sc` | Ethical Hacking | `ux` | User Experience |
+| `wp` | Web Performance | `db` | Databases |
+| `em` | Embedded Systems | `fp` | Functional Programming |
+| `nx` | Networking | `cv` | Computer Vision |
+| `nl` | NLP / Comp. Linguistics | `cr` | Cryptography |
+
+#### Science & Medicine
+
+| Code | Domain | Code | Domain |
+|---|---|---|---|
+| `bi` | Biology | `cm` | Chemistry |
+| `ph` | Physics | `md` | Medicine |
+| `nr` | Neuroscience | `ev` | Environmental |
+| `fs` | Forensics | `fd` | Food Science |
+| `as` | Astronomy | `gl` | Geology |
+| `bt` | Biotech | `gn` | Genetics |
+
+#### Engineering & Making
+
+| Code | Domain | Code | Domain |
+|---|---|---|---|
+| `ee` | Electrical Eng. | `me` | Mechanical Eng. |
+| `rb` | Robotics | `dy` | DIY / Maker |
+| `tp` | 3D Printing | `ar` | Arduino |
+| `ce` | Civil Eng. | `ae` | Aerospace Eng. |
+| `am` | Additive Mfg. | `ct` | Control Systems |
+
+#### Academic & Humanities
+
+| Code | Domain | Code | Domain |
+|---|---|---|---|
+| `mt` | Mathematics | `pl` | Philosophy |
+| `ed` | Education | `lb` | Library Science |
+| `lw` | Law | `ss` | Social Science |
+| `py` | Psychology | `cg` | Cognitive Science |
+| `li` | Linguistics | `hs` | History |
+| `an` | Anthropology | `ec` | Economics |
+
+#### Art & Design
+
+| Code | Domain | Code | Domain |
+|---|---|---|---|
+| `gd` | Graphic Design | `ad` | Animation |
+| `fa` | Fine Arts | `mu` | Music |
+| `pa` | Performing Arts | `sr` | Screenwriting |
+| `tw` | Tech Writing | `wr` | Writing |
+| `vd` | Game Design | `pg` | Photography |
+| `tx` | Textile Arts | `ty` | Typography |
+
+#### Business & Comms
+
+`bz` Business · `mk` Marketing · `gv` Government · `lo` Logistics · `qa` QA · `pm` Project Mgmt · `hr` HR
+
+#### Culture & Society
+
+`mm` Memes · `fn` Fandom · `pp` Pop Culture · `gn` Gender Studies · `al` Alt Lifestyles
+
+#### Games & Media
+
+`rp` RPG · `sm` Streaming · `pd` Podcasting · `cw` Cosplay
+
+#### Futurism
+
+`ax` Aerospace · `ft` Futurism · `ali` Alien Theories · `tr` Transhumanism
+
+#### Custom
+
+`~fermenting` `~beekeeping` `~lockpicking` `~origami` — anything goes.
+
+> `gcs$/ai/wr~fermenting` — paid CS geek, also into AI, writing, and fermenting.
+
+---
+
+### h — Hair
+
+| Short | Name |
+|---|---|
+| `h` | Head |
+| `f` | Face / beard |
+| `b` | Brows |
+| `m` | Mustache |
+| `s` | Sideburns |
+
+0. **Alopecia**
+1. **Shaved**
+2. **Stubble**
+3. **Below average**
+4. **Average**
+5. **Above average**
+6. **Impressive**
+7. **Sasquatch**
+
+---
+
+### i — AI Stance
+
+0. **Butlerian Jihadist** — Would unplug every GPU on earth.
+1. **Strongly opposed** — 'No AI' in bio, code, and dating profile.
+2. **Skeptical** — Prefer human-authored everything.
+3. **Cautious** — Ethics papers keep you up at night.
+4. **Neutral tool** — Like a hammer. No opinions about hammers.
+5. **Positive** — Copilot saved 20 minutes today.
+6. **Enthusiast** — Cyborg partnership workflow.
+7. **Singularity evangelist** — Grocery list is AI-generated.
+
+---
+
+### j — Gaming
+
+**Genre:**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `rp` | `(rpg)` | RPG | `fp` | `(fps)` | Shooter |
+| `st` | `(str)` | Strategy | `pz` | `(pzl)` | Puzzle |
+| `si` | `(sim)` | Simulation | `mm` | `(mmo)` | MMO |
+| `ad` | `(adv)` | Adventure | `sp` | `(spo)` | Sports |
+| `mb` | `(mba)` | Metroidvania | `ro` | `(rog)` | Roguelike |
+| `su` | `(surv)` | Survival | `sa` | `(sand)` | Sandbox |
+| `rr` | `(race)` | Racing | `fi` | `(fight)` | Fighting |
+| `ho` | `(horror)` | Horror | | | |
+
+**Platform:**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `pc` | — | PC | `ps` | — | PlayStation |
+| `xb` | `(xbox)` | Xbox | `ns` | `(switch)` | Switch |
+| `mo` | `(mobile)` | Mobile | `re` | `(retro)` | Retro |
+| `vr` | — | VR | `sd` | `(steamdeck)` | Steam Deck |
+
+**Tabletop:**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `dn` | `(dnd)` | D&D | `pf` | `(path)` | Pathfinder |
+| `cc` | `(coc)` | Call of Cthulhu | `sr` | — | Shadowrun |
+| `wo` | `(wod)` | World of Darkness | `ft` | `(fate)` | Fate |
+| `gu` | `(gurps)` | GURPS | `bg` | — | Board games |
+| `mt` | `(mtg)` | Magic: TG | `wh` | — | Warhammer |
+
+Scale: **enthusiasm** (see global scale table).
+
+> 0: Video games are a waste of time.
+> 7: People disconnect when they see your name.
+
+---
+
+### k — Books
+
+0. **Illiterate by choice** — Words are tiny drawings that haven't tried hard enough.
+1. **Not since school** — Didn't finish that one either.
+2. **Web only** — You call this 'reading.'
+3. **Occasional** — Mostly when trapped on a plane.
+4. **Few/year** — Goodreads updated sporadically.
+5. **Regular** — To-read pile doubles as furniture.
+6. **Avid** — Library cards from multiple jurisdictions.
+7. **Book/week** — Shelves have shelves. Read this spec for fun.
+
+---
+
+### l — Spoken Languages
+
+ISO 639-1 codes + proficiency 0–7. `$` and `+` permitted.
+
+0. **None**
+1. **Few words**
+2. **Tourist**
+3. **Beginner**
+4. **Conversational**
+5. **Proficient**
+6. **Fluent**
+7. **Native**
+
+Common codes: `en` English · `es` Spanish · `fr` French · `de` German · `zh` Chinese · `ar` Arabic · `ja` Japanese · `ko` Korean · `pt` Portuguese · `ru` Russian · `hi` Hindi · `it` Italian · `nl` Dutch · `sv` Swedish · `tr` Turkish · `pl` Polish · `uk` Ukrainian · `fa` Farsi · `he` Hebrew · `th` Thai · `vi` Vietnamese · `id` Indonesian · `ms` Malay · `sw` Swahili · `bn` Bengali · `ta` Tamil
+
+> `lar7$en6de3+5` — native Arabic (paid translator), fluent English, learning German (beginner, aspiring proficient).
+
+---
+
+### m — Music
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `rk` | `(rock)` | Rock | `mt` | `(metal)` | Metal |
+| `pk` | `(punk)` | Punk | `jz` | `(jazz)` | Jazz |
+| `bl` | `(blues)` | Blues | `fk` | `(folk)` | Folk |
+| `cl` | `(clas)` | Classical | `el` | `(elec)` | Electronic |
+| `hp` | `(hip)` | Hip-hop | `pp` | `(pop)` | Pop |
+| `rb` | `(rnb)` | R&B | `cn` | `(coun)` | Country |
+| `ab` | `(amb)` | Ambient | `pg` | `(prog)` | Progressive |
+| `rg` | `(reg)` | Reggae | `in` | `(ind)` | Indie |
+| `sl` | `(soul)` | Soul | `lt` | `(lat)` | Latin |
+| `wr` | `(wrld)` | World | `dk` | `(dnb)` | Drum & Bass |
+| `tr` | `(trap)` | Trap | `lo` | `(lofi)` | Lo-fi |
+| `sy` | `(synth)` | Synthwave | `go` | `(gospel)` | Gospel |
+| `op` | `(opera)` | Opera | `ga` | `(garage)` | Garage |
+
+Scale: **enthusiasm** (see global scale table).
+
+> 0: This genre is an assault on sound.
+> 7: This genre IS your personality.
+
+---
+
+### o — Operating System
+
+**Linux (x prefix):**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `xa` | `(xarch)` | Arch | `xd` | `(xdeb)` | Debian |
+| `xu` | `(xubu)` | Ubuntu | `xm` | `(xmint)` | Mint |
+| `xp` | `(xpop)` | Pop!_OS | `xf` | `(xfed)` | Fedora |
+| `xr` | `(xrh)` | Red Hat | `xc` | `(xcent)` | CentOS/Alma/Rocky |
+| `xs` | `(xsuse)` | OpenSUSE | `xg` | `(xgen)` | Gentoo |
+| `xj` | `(xmanj)` | Manjaro | `xsl` | `(xslk)` | Slackware |
+| `xn` | `(xnix)` | NixOS | `xk` | `(xkali)` | Kali |
+| `xv` | `(xvoid)` | Void | `xz` | `(xzor)` | Zorin |
+| `xx` | `(xmx)` | MX Linux | `xt` | `(xtail)` | Tails |
+| `xq` | `(xqube)` | Qubes | `xl` | `(xlfs)` | LFS |
+| `xe` | `(xelem)` | Elementary | `xw` | `(xwsl)` | WSL |
+| `xi` | `(ximmut)` | Immutable | `xb` | `(xbedrock)` | Bedrock |
+
+**BSD:**
+`fb` FreeBSD · `ob` OpenBSD · `nb` NetBSD · `db` DragonflyBSD
+
+**Windows:**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `wt` | `(wten)` | Windows 10 | `we` | `(welv)` | Windows 11 |
+| `ws` | `(wsrv)` | Win Server | | | |
+
+**Mac:**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `mc` | `(mac)` | macOS | | | |
+
+**Mobile:**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `an` | `(android)` | Android | `io` | `(ios)` | iOS |
+| `pm` | `(pmos)` | postmarketOS | `li` | `(lineage)` | LineageOS |
+
+**Other:**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `sl` | `(sol)` | Solaris | `ax` | `(aix)` | AIX |
+| `ch` | `(chrome)` | ChromeOS | `ha` | `(haiku)` | Haiku |
+| `tm` | `(temple)` | TempleOS | `se` | `(serenity)` | SerenityOS |
+| `rx` | `(redox)` | Redox | `pl` | `(plan9)` | Plan 9 |
+
+Scale: **proficiency** (see global scale table).
+
+> 0: Would mass-format every drive running this.
+> 7: You ARE the sysadmin. First person plural.
+
+---
+
+### p — Programming Languages
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `py` | `(python)` | Python | `rs` | `(rust)` | Rust |
+| `c` | — | C | `cp` | `(cpp)` | C++ |
+| `cs` | `(csharp)` | C# | `jv` | `(java)` | Java |
+| `kt` | `(kotlin)` | Kotlin | `sw` | `(swift)` | Swift |
+| `ph` | `(php)` | PHP | `pl` | `(perl)` | Perl |
+| `lu` | `(lua)` | Lua | `hs` | `(haskell)` | Haskell |
+| `cj` | `(clj)` | Clojure | `er` | `(erlang)` | Erlang |
+| `ex` | `(elixir)` | Elixir | `sc` | `(scala)` | Scala |
+| `jl` | `(julia)` | Julia | `r` | — | R |
+| `m` | `(matlab)` | MATLAB | `zg` | `(zig)` | Zig |
+| `ni` | `(nim)` | Nim | `as` | `(asm)` | Assembly |
+| `sq` | `(sql)` | SQL | `ba` | `(bash)` | Bash |
+| `ps` | `(psh)` | PowerShell | `vb` | — | Visual Basic |
+| `da` | `(dart)` | Dart | `oc` | `(objc)` | Obj-C |
+| `ls` | `(lisp)` | Lisp | `js` | — | JavaScript |
+| `ts` | — | TypeScript | `go` | — | Go |
+| `rb` | `(ruby)` | Ruby | `ml` | `(ocaml)` | OCaml |
+| `fs` | `(fsharp)` | F# | `pr` | `(prolog)` | Prolog |
+| `co` | `(cobol)` | COBOL | `fo` | `(fortran)` | Fortran |
+| `gd` | `(gdscript)` | GDScript | `vl` | `(vhdl)` | VHDL |
+| `sv` | `(sysv)` | SystemVerilog | `cr` | `(crystal)` | Crystal |
+| `hy` | `(hylang)` | Hy | `rk` | `(racket)` | Racket |
+| `tc` | `(tcl)` | Tcl | `aw` | `(awk)` | AWK |
+| `sd` | `(sed)` | sed | `wm` | `(wasm)` | WASM |
+
+Scale: **proficiency** (see global scale table).
+
+> 0: Mass-produced negative opinions without writing a line.
+> 7: You ARE the language. People cite your blog posts.
+
+---
+
+### q — Security / Hacking
+
+0. **No security** — Password is 'password'. Click every link.
+1. **Don't care** — Firewalls are a construction thing.
+2. **Default passwords** — Pet name plus birth year. Reused everywhere.
+3. **Basic awareness** — Know phishing is bad. Fallen for it once.
+4. **Password manager** — Normal human security.
+5. **2FA everywhere** — Judge friends' passwords.
+6. **Encrypts everything** — Paranoid but justified.
+7. **Tinfoil hat** — NSA has a file but can't read it either.
+
+---
+
+### r — Religion
+
+**Single value only** — one tradition + devoutness rating. Parser rejects multiple sub-IDs.
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `ch` | `(chr)` | Christian | `is` | `(isl)` | Islam |
+| `ju` | `(jud)` | Judaism | `hi` | `(hin)` | Hindu |
+| `bu` | `(bud)` | Buddhist | `sk` | `(sik)` | Sikh |
+| `pg` | `(pag)` | Pagan | `de` | `(dei)` | Deist |
+| `ag` | `(agn)` | Agnostic | `at` | `(ath)` | Atheist |
+| `pn` | `(pan)` | Pantheist | `sp` | `(spi)` | Spiritual |
+| `zo` | `(zor)` | Zoroastrian | `ja` | `(jain)` | Jain |
+| `ta` | `(tao)` | Taoist | `sh` | `(shin)` | Shinto |
+| `ba` | `(bah)` | Bahá'í | `dr` | `(druz)` | Druze |
+
+Rating = devoutness: 0 = Hostile, 4 = Cultural, 7 = Clergy-level.
+
+> `ris6` — devout Muslim. `rath4` — culturally atheist.
+
+---
+
+### s — Sex / Relationships
+
+0. **Celibate** — Made your peace.
+1. **Not active (unwilling)** — Dating profile is unrewarded effort.
+2. **Not active** — 'Focusing on yourself.' Friends skeptical.
+3. **Complicated** — Status requires a flowchart.
+4. **Private** — None of your business.
+5. **Dating** — At least two dating apps.
+6. **Partnered** — Found someone who tolerates your geekery.
+7. **Married w/ kids** — Evidence is small, loud, doesn't sleep.
+
+---
+
+### t — TV / Film
+
+**Sci-Fi:**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `st` | `(trek)` | Star Trek | `sw` | `(wars)` | Star Wars |
+| `sg` | `(gate)` | Stargate | `ex` | `(exp)` | Expanse |
+| `bs` | `(bsg)` | Battlestar | `bb` | `(bab)` | Babylon 5 |
+| `ff` | — | Firefly | `du` | `(dune)` | Dune |
+| `fn` | `(fnd)` | Foundation | `dw` | `(drwho)` | Doctor Who |
+| `tb` | `(tbp)` | 3 Body Problem | `si` | `(silo)` | Silo |
+| `fa` | `(fall)` | Fallout | `al` | `(alien)` | Alien |
+| `bd` | `(blade)` | Blade Runner | `or` | `(orville)` | Orville |
+
+**Fantasy:**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `go` | `(got)` | Game of Thrones | `wo` | `(wot)` | Wheel of Time |
+| `ro` | `(rop)` | Rings of Power | `wi` | `(wit)` | Witcher |
+| `sn` | `(sand)` | Sandman | | | |
+
+**Other:**
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `mp` | `(monty)` | Monty Python | `bt` | `(bbt)` | Big Bang Theory |
+| `rm` | — | Rick & Morty | `bl` | — | Black Mirror |
+| `sv` | `(sev)` | Severance | `mr` | `(mrobot)` | Mr. Robot |
+| `hm` | `(humans)` | Humans | `ww` | `(westworld)` | Westworld |
+| `dp` | `(devs)` | Devs | | | |
+
+Scale: **enthusiasm** (see global scale table).
+
+> 0: Crime against storytelling.
+> 7: Know the lore deeper than the writers.
+
+---
+
+### v — Politics
+
+Format: `v<social>/<economic>`. No modifiers.
+
+**Social:** 0 = Far-right authoritarian · 4 = Centrist · 7 = Far-left libertarian
+**Economic:** 0 = Unregulated capitalism · 4 = Mixed economy · 7 = Full socialism
+
+> `v5/3` — socially center-left, economically center-right.
+> `v4/4` — centrist. You annoy both sides equally.
+
+---
+
+### w — Hardware
+
+0. **Defeated by USB** — The cable won.
+1. **Can plug in** — Big hole is for power.
+2. **Replaced a part** — Three YouTube videos and mild weeping.
+3. **Troubleshoots** — Can tell RAM from a graphics card.
+4. **Built a PC** — Cable management isn't great but it posted.
+5. **Comfortable** — Friends call when things break.
+6. **Mods regularly** — Void warranties recreationally.
+7. **Builds everything** — Manufactured your own PCBs.
+
+---
+
+### x — Comics / Manga
+
+| Short | (Long) | Name | Short | (Long) | Name |
+|---|---|---|---|---|---|
+| `dc` | — | DC Comics | `mv` | `(marvel)` | Marvel |
+| `mg` | `(manga)` | Manga | `dl` | `(dilbert)` | Dilbert |
+| `xk` | `(xkcd)` | XKCD | `in` | `(indie)` | Indie |
+| `wt` | `(webtoon)` | Webtoon | `gn` | `(graphicnovel)` | Graphic Novels |
+
+Scale: **enthusiasm** (see global scale table).
+
+> 0: Comics are for children. (You're wrong.)
+> 7: Collection requires its own room.
+
+---
+
+### y — Fitness
+
+0. **What is outside** — Cardiovascular exercise is walking to the fridge.
+1. **Avoids activity** — Physical activity is a social obligation.
+2. **Occasional walk** — Coffee is the point, not the walk.
+3. **Light activity** — Own athletic wear. Never been to a gym.
+4. **Some exercise** — Can climb stairs without existential crisis.
+5. **Regular workouts** — Track your steps.
+6. **Very active** — Resting heart rate impresses doctors.
+7. **Daily athlete** — Body is a temple. Temple has a squat rack.
+
+---
+
+### z — Maker / DIY
+
+0. **Defeated by IKEA** — Allen keys are your nemesis.
+1. **IKEA once** — One screw left over. Probably fine.
+2. **Basic repairs** — Holes approximately where they should be.
+3. **Handy** — Fixes hold. Duct tape is structural.
+4. **Simple projects** — A shelf here, a birdhouse there.
+5. **Regular maker** — Projects folder never shrinks.
+6. **Advanced** — Workshop has zones.
+7. **Built my house** — Hardware store sends Christmas card.
+
+---
+## Extending UGI
+
+Any field with sub-IDs accepts custom entries via `~`:
+
+```
+gcs/~mycology geek of CS and mycology
+m~synthwave6 synthwave enthusiast
+t~severance7 severance obsessed
+j~larp5 LARP, competent
+o~beos4 BeOS, neutral nostalgia
+```
+
+Letters `n` and `u` are reserved for future spec versions.
+
+---
+## Examples
+
+### jdoe — Full-stack developer
+
+```
+------- BEGIN UGI BLOCK -------
+v:0 @jdoe Gcs$/dev
+A4 E4 Len7
+Oxa6 Owe5 Ppy6$ Pjs6$ Pts5 Prs4+6 Dvs6 W5 Q4
+I5 V5/4 Rag4
+Tst5 Tex7 K5 Xxk6 Jst5 Jpc6 Mrk5 Min4
+B5/4 C3 Hh4 Hf5 Hm4 S6 Y4 F4 Z3
+-------- END UGI BLOCK --------
+```
+
+```
+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
+```
+
+### neo — Security researcher
+
+```
+------- BEGIN UGI BLOCK -------
+v:0 @neo Gcy$/sec/os
+A3 E6 Len6 Lzh4
+Oxd7$ Ofb6 Pc6$ Pba7 Pas5 Prs5 Ded7 W6 Q7$
+I1 V6/5 Rat5
+Tff7 Tbs6 Tbl6 K7 Jro6 Jpc7 Mmt6 Mel5
+B5/3 C1 Hh2 S2 Y5 F3 Z6
+-------- END UGI BLOCK --------
+```
+
+```
+ugi:0@neo:gcy$/sec/os,a3,b5/3,c1,hh2,e6,len6zh4,oxd7$fb6,pc6$ba7as5rs5,ded7,w6,q7$,i1,v6/5,rat5,tff7bs6bl6,k7,jro6pc7,mmt6el5,s2,y5,f3,z6
+```
+
+### hax0r — Hardware hacker
+
+```
+------- BEGIN UGI BLOCK -------
+v:0/3 @hax0r Gee$/rb/dy~solder
+A5 E4 Lja7 Len5
+Oxg7 Ofb5 Pc5 Pba6 Pas7$ Dem5 W7$ Q6
+I2 V3/3 Rbu5
+Tbb6 Tff7 K5 Xxk6 Xdl5 Jre7 Jpc6 Jbg5 Mmt7 Mpk6
+B6/5 C2 Hh3 Hf6+7 Hm5 S3 Y5 F4 Z7$
+-------- END UGI BLOCK --------
+```
+
+```
+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$
+```
+
+---
+## Comparison with predecessors
+
+| | Geek Code 3.12 (1996) | Geek Code 2026 | Hacker Key v4 (2006) | UGI v0 |
+|---|---|---|---|---|
+| Rating | +/- stacking | +/- stacking | 0-9 | 0-7 octal |
+| Length | 4-6 lines | 4-8 lines | 1 line | 1 or 4-8 |
+| Fields | ~25 | ~35+ | ~16 | 24+2 |
+| URI-safe | No | No | Mostly | Yes |
+| Case | Sensitive | Sensitive | Sensitive | Insensitive |
+| Extensible | No | No | Limited | ~ custom |
+| Format | Block | Block | Inline | Block+URI |
+| Active | 1996 | GitHub | 2006 | Draft |
+
+### Fields retained
+
+`a` age brackets, `b` dimensions, `c` dress/clothing, `e` education, `g` geek type, expanded, `h` hair/beard, `k` books, `o` os merged, `p` programming, `q` security/pgp, `s` sex, `t` tv merged, `v` politics, `w` hardware — all present in one or both predecessors.
+
+### Fields added
+
+`d` — Editor war must be documented.
+`f` — Geeks cook now.
+`i` — Defining divide of the 2020s.
+`j` — Gaming beyond DOOM.
+`l` — Geek culture is global.
+`m` — Absent from predecessors.
+`r` — From Hacker Key.
+`x` — Beyond Dilbert.
+`y` — Modern geek exercises.
+`z` — Maker movement.
+
+### Fields removed
+
+Usenet — dead. Kibo — niche. DOOM — use j. OS/2, VMS — use o+~custom. MBTI — pop psychology. Residence — low value. GitHub handle — @handle. I/O — abstract. Cracking — use q. Lang hacking — in g. Math level — in e+g. Prog methodology — in p.
+
+---
+## Quick reference
+
+```
+FORMAT: ugi:<ver>[/<rev>]@<handle>:<fields>
+SCALE: 0=hostile 1=dislike 2=meh 3=slight- 4=neutral 5=like 6=strong 7=obsessed
+MODIFY: $ = paid + = aspire / = fluctuate,separate ~ = custom
+
+a age b build c clothing d editor / ide e education
+f food / cooking g geek specialization h hair i ai stance j gaming
+k books l spoken languages m music [n reserved] o operating system
+p programming languages q security / hacking r religion s sex / relationships t tv / film
+[u reserved] v politics w hardware x comics / manga y fitness
+z maker / diy
+
+$+ f j l o p q w y z $ only g + only b c d e h k s none a i m r t v x
+```
+
+---
+## References
+
+- [Geek Code (v0.1–latest)](https://sig.codes/geek/) — Robert A. Hayden, 1993-1996
+- [Geek Code 4.0+](https://sig.codes/geek-4.0/) — exarobibliologist, 2019-2026
+- [Hacker Key (v0.1–latest)](https://sig.codes/hacker-key/) — Chris Allegretta, 2003-2006
+- [sig.codes](https://sig.codes/)
+- [Geek Code on Wikipedia](https://en.wikipedia.org/wiki/Geek_Code)
+- [Geek Code v3.12 mirror](https://geekcode.xyz/)
+- [Hacker Key v4 mirror](https://sig.codes/hacker-key/4/)
+
+---
+
+## License
+
+MIT — see [LICENSE](./LICENSE).
+## Check
+
+- **[ugi.gumx.cc](https://ugi.gumx.cc)** ([repo](https://git.sr.ht/~gumxcc/ugi.gumx.cc)) — web-based UGI encoder, decoder, and format converter
+- **ugi-cli** ([repo](https://git.sr.ht/~gumxcc/ugi-cli)) — command-line tool for encoding, decoding, and converting UGI strings
+
+---
+
+## Generator scripts
+
+The `scripts/` directory contains generators that produce all artifacts from `ugi_registry_v0.json`.
+Each script takes the registry JSON path and output file path as arguments:
+
+```bash
+python scripts/gen_spec.py ugi_registry_v0.json README.md
+python scripts/gen_abnf.py ugi_registry_v0.json grammar/UGI_GRAMMAR_v0.abnf
+python scripts/gen_ebnf.py ugi_registry_v0.json grammar/UGI_GRAMMAR_v0.ebnf
+```
+
+### Requirements
+
+- Python 3.8+
+- No external dependencies
+
+### Project structure
+
+```
+ugi-spec/
+├── ugi_registry_v0.json # source of truth
+├── scripts/
+│ ├── gen_spec.py # spec markdown generator
+│ ├── gen_abnf.py # ABNF grammar generator
+│ └── gen_ebnf.py # EBNF grammar generator
+├── grammar/
+│ ├── UGI_GRAMMAR_v0.abnf # generated ABNF
+│ └── UGI_GRAMMAR_v0.ebnf # generated EBNF
+├── tests/
+│ └── cases.json # test cases for all field types and formats
+└── README.md # this file (generated spec + usage)
+```
+
+---
+
+## License
+
+MIT — see [LICENSE](./LICENSE).
+