[{"data":1,"prerenderedAt":1363},["ShallowReactive",2],{"navigation_docs":3,"-quayel-gateway-versioning":91,"-quayel-gateway-versioning-surround":1362},[4],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":90},"Quayel Gateway","i-lucide-network","\u002Fquayel-gateway","quayel-gateway",[10,29,68],{"title":11,"icon":12,"path":13,"stem":14,"children":15},"Getting Started","i-lucide-rocket","\u002Fquayel-gateway\u002Fgetting-started","quayel-gateway\u002F01.getting-started\u002Findex",[16,19,24],{"title":17,"path":13,"stem":14,"icon":18},"Introduction","i-lucide-book-open",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fquayel-gateway\u002Fgetting-started\u002Finstallation","quayel-gateway\u002F01.getting-started\u002F1.installation","i-lucide-container",{"title":25,"path":26,"stem":27,"icon":28},"Project Structure","\u002Fquayel-gateway\u002Fgetting-started\u002Fproject-structure","quayel-gateway\u002F01.getting-started\u002F2.project-structure","i-lucide-folder-tree",{"title":30,"icon":31,"path":32,"stem":33,"children":34},"Plugins","i-lucide-puzzle","\u002Fquayel-gateway\u002Fplugins","quayel-gateway\u002F02.plugins\u002Findex",[35,38,43,48,53,58,63],{"title":36,"path":32,"stem":33,"icon":37},"Overview","i-lucide-workflow",{"title":39,"path":40,"stem":41,"icon":42},"IP Intelligence","\u002Fquayel-gateway\u002Fplugins\u002Fip-intel","quayel-gateway\u002F02.plugins\u002F1.ip-intel","i-lucide-radar",{"title":44,"path":45,"stem":46,"icon":47},"Firewall","\u002Fquayel-gateway\u002Fplugins\u002Ffirewall","quayel-gateway\u002F02.plugins\u002F2.firewall","i-lucide-shield",{"title":49,"path":50,"stem":51,"icon":52},"Rate Limiting","\u002Fquayel-gateway\u002Fplugins\u002Frate-limiting","quayel-gateway\u002F02.plugins\u002F3.rate-limiting","i-lucide-gauge",{"title":54,"path":55,"stem":56,"icon":57},"Cache","\u002Fquayel-gateway\u002Fplugins\u002Fcache","quayel-gateway\u002F02.plugins\u002F4.cache","i-lucide-database",{"title":59,"path":60,"stem":61,"icon":62},"Load Balancer","\u002Fquayel-gateway\u002Fplugins\u002Fload-balancer","quayel-gateway\u002F02.plugins\u002F5.load-balancer","i-lucide-scale",{"title":64,"path":65,"stem":66,"icon":67},"Auto-SSL","\u002Fquayel-gateway\u002Fplugins\u002Fauto-ssl","quayel-gateway\u002F02.plugins\u002F6.auto-ssl","i-lucide-lock",{"title":69,"icon":70,"path":71,"stem":72,"children":73},"AI","i-lucide-bot","\u002Fquayel-gateway\u002Fai","quayel-gateway\u002F03.ai\u002Findex",[74,75,80,85],{"title":36,"path":71,"stem":72,"icon":70},{"title":76,"path":77,"stem":78,"icon":79},"The Quayel Gateway Skill","\u002Fquayel-gateway\u002Fai\u002Fskill","quayel-gateway\u002F03.ai\u002F1.skill","i-lucide-wand-sparkles",{"title":81,"path":82,"stem":83,"icon":84},"Installing the Skill","\u002Fquayel-gateway\u002Fai\u002Finstallation","quayel-gateway\u002F03.ai\u002F2.installation","i-lucide-download",{"title":86,"path":87,"stem":88,"icon":89},"AI Agent Guide","\u002Fquayel-gateway\u002Fai\u002Fagent-guide","quayel-gateway\u002F03.ai\u002F3.agent-guide","i-lucide-braces",false,{"id":92,"title":93,"body":94,"description":1354,"extension":1355,"links":1356,"meta":1357,"navigation":90,"path":1358,"seo":1359,"stem":1360,"__hash__":1361},"docs\u002Fquayel-gateway\u002F10.versioning.md","Versioning",{"type":95,"value":96,"toc":1330},"minimark",[97,101,110,228,233,247,269,272,287,294,301,314,391,396,443,447,456,545,549,552,583,591,601,625,633,636,646,650,781,785,806,810,813,819,833,837,840,844,874,878,936,1066,1070,1073,1231,1235,1259,1263,1326],[98,99,93],"h1",{"id":100},"versioning",[102,103,104,105,109],"p",{},"Quayel has ",[106,107,108],"strong",{},"four independent version layers",". Understanding them is key to operating the gateway safely — every access log line records which gateway, which config, and which data it ran with.",[111,112,113,132],"table",{},[114,115,116],"thead",{},[117,118,119,123,126,129],"tr",{},[120,121,122],"th",{},"Layer",[120,124,125],{},"What it versions",[120,127,128],{},"Where it lives",[120,130,131],{},"Example",[133,134,135,162,187,210],"tbody",{},[117,136,137,143,146,153],{},[138,139,140],"td",{},[106,141,142],{},"Gateway release",[138,144,145],{},"The binary \u002F code",[138,147,148,152],{},[149,150,151],"code",{},"Cargo.toml",", Docker tag",[138,154,155,158,159],{},[149,156,157],{},"0.1.0",", ",[149,160,161],{},"quayel\u002Fquayel-gateway:0.1.0",[117,163,164,169,176,182],{},[138,165,166],{},[106,167,168],{},"Config version",[138,170,171,172,175],{},"One ",[149,173,174],{},"config.json"," revision",[138,177,178,181],{},[149,179,180],{},"config_version"," field",[138,183,184],{},[149,185,186],{},"2026-01-15-001",[117,188,189,194,197,203],{},[138,190,191],{},[106,192,193],{},"Dataset versions",[138,195,196],{},"Embedded IP intelligence data",[138,198,199,202],{},[149,200,201],{},"src\u002Fdata\u002F"," at build time",[138,204,205,206,209],{},"DB-IP ",[149,207,208],{},"2026-01",", registry entries",[117,211,212,217,220,223],{},[138,213,214],{},[106,215,216],{},"Docs versions",[138,218,219],{},"This documentation",[138,221,222],{},"URL prefixes + version switcher",[138,224,225],{},[149,226,227],{},"v0.1 (latest)",[229,230,232],"h2",{"id":231},"gateway-releases","Gateway releases",[102,234,235,236,239,240,243,244,246],{},"The gateway binary follows ",[106,237,238],{},"semantic versioning"," (",[149,241,242],{},"MAJOR.MINOR.PATCH",") via ",[149,245,151],{},":",[248,249,250,257,263],"ul",{},[251,252,253,256],"li",{},[106,254,255],{},"MAJOR"," — breaking config schema changes (fields removed, enums changed, defaults changed)",[251,258,259,262],{},[106,260,261],{},"MINOR"," — new plugins, new config fields, new condition paths (backward compatible)",[251,264,265,268],{},[106,266,267],{},"PATCH"," — bug fixes, embedded data refreshes, performance work",[102,270,271],{},"Release artifacts:",[248,273,274,281],{},[251,275,276,277,280],{},"Binary: ",[149,278,279],{},"target\u002Frelease\u002Fquayel-gateway"," (strip debug symbols before shipping)",[251,282,283,284],{},"Docker: ",[149,285,286],{},"quayel\u002Fquayel-gateway:\u003Cversion>",[288,289,290,291,293],"tip",{},"A dataset-only refresh (new MMDB \u002F CIDR lists, no code change) ships as a ",[106,292,267],{}," release — but always record which dataset vintages went into the build (see below).",[229,295,297,298,300],{"id":296},"the-config_version-system","The ",[149,299,180],{}," system",[102,302,303,304,306,307,309,310,313],{},"Every ",[149,305,174],{}," must declare a ",[149,308,180],{},". It is a ",[106,311,312],{},"free-form string"," that identifies one revision of the config — the gateway never parses it, it only tracks and logs it.",[315,316,321],"pre",{"className":317,"code":318,"language":319,"meta":320,"style":320},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"gateway_id\": \"gw-prod-01\",\n  \"config_version\": \"2026-01-15-001\",\n  ...\n}\n","json","",[149,322,323,332,359,378,385],{"__ignoreMap":320},[324,325,328],"span",{"class":326,"line":327},"line",1,[324,329,331],{"class":330},"sMK4o","{\n",[324,333,335,338,342,345,347,350,354,356],{"class":326,"line":334},2,[324,336,337],{"class":330},"  \"",[324,339,341],{"class":340},"spNyl","gateway_id",[324,343,344],{"class":330},"\"",[324,346,246],{"class":330},[324,348,349],{"class":330}," \"",[324,351,353],{"class":352},"sfazB","gw-prod-01",[324,355,344],{"class":330},[324,357,358],{"class":330},",\n",[324,360,362,364,366,368,370,372,374,376],{"class":326,"line":361},3,[324,363,337],{"class":330},[324,365,180],{"class":340},[324,367,344],{"class":330},[324,369,246],{"class":330},[324,371,349],{"class":330},[324,373,186],{"class":352},[324,375,344],{"class":330},[324,377,358],{"class":330},[324,379,381],{"class":326,"line":380},4,[324,382,384],{"class":383},"sTEyZ","  ...\n",[324,386,388],{"class":326,"line":387},5,[324,389,390],{"class":330},"}\n",[392,393,395],"h3",{"id":394},"rules","Rules",[397,398,399,408,414,437],"ol",{},[251,400,401,404,405,407],{},[106,402,403],{},"Required."," Configs without ",[149,406,180],{}," are rejected at startup.",[251,409,410,413],{},[106,411,412],{},"Bump it on every change."," This is the whole point: config revisions must be distinguishable.",[251,415,416,419,420,423,424,158,426,429,430,158,433,436],{},[106,417,418],{},"Recommended format:"," ",[149,421,422],{},"YYYY-MM-DD-NNN"," — date plus a per-day sequence number (",[149,425,186],{},[149,427,428],{},"2026-01-15-002",", …). Simple counters (",[149,431,432],{},"\"1\"",[149,434,435],{},"\"2\"",") also work.",[251,438,439,442],{},[106,440,441],{},"Never reuse"," a version string for different content.",[392,444,446],{"id":445},"why-it-matters","Why it matters",[102,448,449,451,452,455],{},[149,450,180],{}," is stamped into ",[106,453,454],{},"every JSONL access log line",", so at any moment you can answer \"which config produced this traffic?\" during an incident or audit:",[315,457,459],{"className":317,"code":458,"language":319,"meta":320,"style":320},"{\n  \"timestamp\": \"2026-01-15T10:30:45.123456789+00:00\",\n  \"gateway_id\": \"gw-prod-01\",\n  \"config_version\": \"2026-01-15-001\",\n  \"request_id\": \"a1b2c3d4-...\"\n}\n",[149,460,461,465,485,503,521,540],{"__ignoreMap":320},[324,462,463],{"class":326,"line":327},[324,464,331],{"class":330},[324,466,467,469,472,474,476,478,481,483],{"class":326,"line":334},[324,468,337],{"class":330},[324,470,471],{"class":340},"timestamp",[324,473,344],{"class":330},[324,475,246],{"class":330},[324,477,349],{"class":330},[324,479,480],{"class":352},"2026-01-15T10:30:45.123456789+00:00",[324,482,344],{"class":330},[324,484,358],{"class":330},[324,486,487,489,491,493,495,497,499,501],{"class":326,"line":361},[324,488,337],{"class":330},[324,490,341],{"class":340},[324,492,344],{"class":330},[324,494,246],{"class":330},[324,496,349],{"class":330},[324,498,353],{"class":352},[324,500,344],{"class":330},[324,502,358],{"class":330},[324,504,505,507,509,511,513,515,517,519],{"class":326,"line":380},[324,506,337],{"class":330},[324,508,180],{"class":340},[324,510,344],{"class":330},[324,512,246],{"class":330},[324,514,349],{"class":330},[324,516,186],{"class":352},[324,518,344],{"class":330},[324,520,358],{"class":330},[324,522,523,525,528,530,532,534,537],{"class":326,"line":387},[324,524,337],{"class":330},[324,526,527],{"class":340},"request_id",[324,529,344],{"class":330},[324,531,246],{"class":330},[324,533,349],{"class":330},[324,535,536],{"class":352},"a1b2c3d4-...",[324,538,539],{"class":330},"\"\n",[324,541,543],{"class":326,"line":542},6,[324,544,390],{"class":330},[392,546,548],{"id":547},"hot-reload-and-version-transitions","Hot reload and version transitions",[102,550,551],{},"The gateway hot-reloads its config — no restart, no dropped connections. The config watcher periodically hashes the file (SHA-256); when it changes:",[397,553,554,565,572],{},[251,555,556,557,560,561,564],{},"The new config is ",[106,558,559],{},"validated"," (parse + schema checks) and ",[106,562,563],{},"compiled"," (conditions, regexes, …)",[251,566,567,568,571],{},"If validation or compilation ",[106,569,570],{},"fails",", the gateway keeps the current config and retries on the next cycle — a broken config file can never take the gateway down",[251,573,574,575,578,579,582],{},"On success, the compiled config is ",[106,576,577],{},"atomically swapped"," in (",[149,580,581],{},"ArcSwap",") and the transition is logged with both versions:",[315,584,589],{"className":585,"code":587,"language":588},[586],"language-text","Config hot-reloaded successfully  old_version=2026-01-15-001  new_version=2026-01-15-002\n","text",[149,590,587],{"__ignoreMap":320},[102,592,593,594,596,597,600],{},"Because every log line carries ",[149,595,180],{},", you can split traffic analysis across a reload boundary with a one-line ",[149,598,599],{},"jq"," filter:",[315,602,606],{"className":603,"code":604,"language":605,"meta":320,"style":320},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","jq 'select(.config_version == \"2026-01-15-002\")' access.jsonl\n","bash",[149,607,608],{"__ignoreMap":320},[324,609,610,613,616,619,622],{"class":326,"line":327},[324,611,599],{"class":612},"sBMFI",[324,614,615],{"class":330}," '",[324,617,618],{"class":352},"select(.config_version == \"2026-01-15-002\")",[324,620,621],{"class":330},"'",[324,623,624],{"class":352}," access.jsonl\n",[626,627,628,629,632],"note",{},"Auto-SSL ",[149,630,631],{},"domains"," are also updated on hot reload — adding a domain to the config only updates the allowed list; the certificate itself is provisioned on the next TLS handshake for that domain.",[229,634,193],{"id":635},"dataset-versions",[102,637,638,639,642,643,645],{},"IP intelligence data is ",[106,640,641],{},"compiled into the binary",", so a dataset version = the vintage of ",[149,644,201],{}," at build time. The gateway has no runtime data refresh.",[392,647,649],{"id":648},"what-is-versioned","What is versioned",[111,651,652,664],{},[114,653,654],{},[117,655,656,659,661],{},[120,657,658],{},"Dataset",[120,660,93],{},[120,662,663],{},"Vintage marker",[133,665,666,682,694,705,718,730,742,754,769],{},[117,667,668,673,676],{},[138,669,670],{},[149,671,672],{},"dbip-city-lite.mmdb",[138,674,675],{},"DB-IP monthly release",[138,677,678,679],{},"Filename date, e.g. ",[149,680,681],{},"dbip-city-lite-2026-01",[117,683,684,689,691],{},[138,685,686],{},[149,687,688],{},"dbip-asn-lite.mmdb",[138,690,675],{},[138,692,693],{},"Filename date",[117,695,696,701,703],{},[138,697,698],{},[149,699,700],{},"dbip-country.mmdb",[138,702,675],{},[138,704,693],{},[117,706,707,712,715],{},[138,708,709],{},[149,710,711],{},"vpn.txt",[138,713,714],{},"X4BNet, refreshed daily upstream",[138,716,717],{},"Date of download",[117,719,720,725,728],{},[138,721,722],{},[149,723,724],{},"tor.txt",[138,726,727],{},"Tor Project, refreshed hourly upstream",[138,729,717],{},[117,731,732,737,740],{},[138,733,734],{},[149,735,736],{},"cloudflare.txt",[138,738,739],{},"Cloudflare published ranges",[138,741,717],{},[117,743,744,749,752],{},[138,745,746],{},[149,747,748],{},"hosting-asns.txt",[138,750,751],{},"bad-asn-list",[138,753,717],{},[117,755,756,761,766],{},[138,757,758],{},[149,759,760],{},"provider-asns.txt",[138,762,763],{},[106,764,765],{},"Versioned in the gateway repo",[138,767,768],{},"Git history — one line per provider",[117,770,771,776,779],{},[138,772,773],{},[149,774,775],{},"proxy.txt",[138,777,778],{},"FireHOL (empty by default)",[138,780,717],{},[392,782,784],{"id":783},"the-provider-asn-registry","The provider ASN registry",[102,786,787,789,790,793,794,797,798,801,802,805],{},[149,788,760],{}," is the only dataset that is a ",[106,791,792],{},"living registry in the repo",". It maps ASN → provider label (",[149,795,796],{},"47583|Hostinger","), driving ",[149,799,800],{},"ip.is_datacenter"," and ",[149,803,804],{},"ip.provider",". Adding a provider is a one-line change followed by a rebuild; each entry is effectively versioned by the git commit that introduced it.",[392,807,809],{"id":808},"recording-dataset-vintages","Recording dataset vintages",[102,811,812],{},"When cutting a gateway release, record the dataset vintages in the release notes, e.g.:",[315,814,817],{"className":815,"code":816,"language":588},[586],"quayel-gateway 0.1.1 — data refresh\n  dbip-city-lite    2026-02\n  dbip-asn-lite     2026-02\n  dbip-country      2026-02\n  vpn.txt           2026-02-10\n  tor.txt           2026-02-10\n  provider-asns     git 8f3a2c1 (38 ASNs)\n",[149,818,816],{"__ignoreMap":320},[102,820,821,822,827,828,832],{},"See ",[823,824,826],"a",{"href":825},"\u002Fquayel-gateway\u002Fdata-sources#updating-embedded-data","Data Sources — Updating embedded data"," for the refresh procedure and the ",[823,829,831],{"href":830},"\u002Fquayel-gateway\u002Fdata-sources#recommended-update-schedule","recommended update schedule",".",[229,834,836],{"id":835},"documentation-versions","Documentation versions",[102,838,839],{},"This documentation site has a built-in version system.",[392,841,843],{"id":842},"how-it-works","How it works",[248,845,846,854,864],{},[251,847,848,419,851,853],{},[106,849,850],{},"Unversioned URLs are always the LATEST docs.",[149,852,13],{}," tracks the current gateway release line.",[251,855,856,859,860,863],{},[106,857,858],{},"Archived versions are snapshots"," served under a version prefix: ",[149,861,862],{},"\u002Fquayel-gateway\u002Fv0.1\u002Fgetting-started"," is frozen at the moment v0.1 was the latest.",[251,865,866,867,870,871,873],{},"A ",[106,868,869],{},"version switcher"," appears at the top of the left sidebar on every ",[149,872,7],{}," page. It rewrites the current page's path between version prefixes, so you land on the same page in the other version.",[392,875,877],{"id":876},"where-versions-live","Where versions live",[111,879,880,890],{},[114,881,882],{},[117,883,884,887],{},[120,885,886],{},"Piece",[120,888,889],{},"File",[133,891,892,906,916,926],{},[117,893,894,897],{},[138,895,896],{},"Version list & labels",[138,898,899,902,903],{},[149,900,901],{},"app\u002Fapp.config.ts"," → ",[149,904,905],{},"quayel.versions",[117,907,908,911],{},[138,909,910],{},"Switcher UI",[138,912,913],{},[149,914,915],{},"app\u002Fcomponents\u002FDocsVersionSelect.vue",[117,917,918,921],{},[138,919,920],{},"Latest docs",[138,922,923],{},[149,924,925],{},"content\u002Fquayel-gateway\u002F**",[117,927,928,931],{},[138,929,930],{},"Archived snapshots",[138,932,933],{},[149,934,935],{},"content\u002Fquayel-gateway\u002FvX.Y\u002F**",[315,937,941],{"className":938,"code":939,"language":940,"meta":320,"style":320},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F app\u002Fapp.config.ts\nquayel: {\n  versions: [\n    { label: 'v0.1 (latest)', base: '\u002Fquayel-gateway', latest: true },\n    { label: 'v0.1', base: '\u002Fquayel-gateway\u002Fv0.1', archived: true },\n  ],\n},\n","ts",[149,942,943,949,959,970,1014,1053,1060],{"__ignoreMap":320},[324,944,945],{"class":326,"line":327},[324,946,948],{"class":947},"sHwdD","\u002F\u002F app\u002Fapp.config.ts\n",[324,950,951,954,956],{"class":326,"line":334},[324,952,953],{"class":612},"quayel",[324,955,246],{"class":330},[324,957,958],{"class":330}," {\n",[324,960,961,964,966],{"class":326,"line":361},[324,962,963],{"class":612},"  versions",[324,965,246],{"class":330},[324,967,969],{"class":968},"swJcz"," [\n",[324,971,972,975,978,980,982,984,986,989,992,994,996,998,1000,1002,1005,1007,1011],{"class":326,"line":380},[324,973,974],{"class":330},"    {",[324,976,977],{"class":968}," label",[324,979,246],{"class":330},[324,981,615],{"class":330},[324,983,227],{"class":352},[324,985,621],{"class":330},[324,987,988],{"class":330},",",[324,990,991],{"class":968}," base",[324,993,246],{"class":330},[324,995,615],{"class":330},[324,997,7],{"class":352},[324,999,621],{"class":330},[324,1001,988],{"class":330},[324,1003,1004],{"class":968}," latest",[324,1006,246],{"class":330},[324,1008,1010],{"class":1009},"sfNiH"," true",[324,1012,1013],{"class":330}," },\n",[324,1015,1016,1018,1020,1022,1024,1027,1029,1031,1033,1035,1037,1040,1042,1044,1047,1049,1051],{"class":326,"line":387},[324,1017,974],{"class":330},[324,1019,977],{"class":968},[324,1021,246],{"class":330},[324,1023,615],{"class":330},[324,1025,1026],{"class":352},"v0.1",[324,1028,621],{"class":330},[324,1030,988],{"class":330},[324,1032,991],{"class":968},[324,1034,246],{"class":330},[324,1036,615],{"class":330},[324,1038,1039],{"class":352},"\u002Fquayel-gateway\u002Fv0.1",[324,1041,621],{"class":330},[324,1043,988],{"class":330},[324,1045,1046],{"class":968}," archived",[324,1048,246],{"class":330},[324,1050,1010],{"class":1009},[324,1052,1013],{"class":330},[324,1054,1055,1058],{"class":326,"line":542},[324,1056,1057],{"class":968},"  ]",[324,1059,358],{"class":330},[324,1061,1063],{"class":326,"line":1062},7,[324,1064,1065],{"class":330},"},\n",[392,1067,1069],{"id":1068},"cutting-a-new-docs-version","Cutting a new docs version",[102,1071,1072],{},"When a new gateway release line ships (say v0.2):",[1074,1075,1076,1080,1083,1107,1111,1117,1221,1225],"steps",{},[392,1077,1079],{"id":1078},"snapshot-the-current-docs","Snapshot the current docs",[102,1081,1082],{},"Copy the current pages into a versioned folder (the snapshot is never edited again):",[315,1084,1086],{"className":603,"code":1085,"language":605,"meta":320,"style":320},"cp -r content\u002Fquayel-gateway content\u002Fquayel-gateway\u002Fv0.1\n# remove the section metadata from the snapshot if desired\n",[149,1087,1088,1102],{"__ignoreMap":320},[324,1089,1090,1093,1096,1099],{"class":326,"line":327},[324,1091,1092],{"class":612},"cp",[324,1094,1095],{"class":352}," -r",[324,1097,1098],{"class":352}," content\u002Fquayel-gateway",[324,1100,1101],{"class":352}," content\u002Fquayel-gateway\u002Fv0.1\n",[324,1103,1104],{"class":326,"line":334},[324,1105,1106],{"class":947},"# remove the section metadata from the snapshot if desired\n",[392,1108,1110],{"id":1109},"update-the-version-list","Update the version list",[102,1112,1113,1114,1116],{},"In ",[149,1115,901],{},", add the archived entry and relabel latest:",[315,1118,1120],{"className":938,"code":1119,"language":940,"meta":320,"style":320},"quayel: {\n  versions: [\n    { label: 'v0.2 (latest)', base: '\u002Fquayel-gateway', latest: true },\n    { label: 'v0.1', base: '\u002Fquayel-gateway\u002Fv0.1', archived: true },\n  ],\n},\n",[149,1121,1122,1130,1138,1175,1211,1217],{"__ignoreMap":320},[324,1123,1124,1126,1128],{"class":326,"line":327},[324,1125,953],{"class":612},[324,1127,246],{"class":330},[324,1129,958],{"class":330},[324,1131,1132,1134,1136],{"class":326,"line":334},[324,1133,963],{"class":612},[324,1135,246],{"class":330},[324,1137,969],{"class":968},[324,1139,1140,1142,1144,1146,1148,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173],{"class":326,"line":361},[324,1141,974],{"class":330},[324,1143,977],{"class":968},[324,1145,246],{"class":330},[324,1147,615],{"class":330},[324,1149,1150],{"class":352},"v0.2 (latest)",[324,1152,621],{"class":330},[324,1154,988],{"class":330},[324,1156,991],{"class":968},[324,1158,246],{"class":330},[324,1160,615],{"class":330},[324,1162,7],{"class":352},[324,1164,621],{"class":330},[324,1166,988],{"class":330},[324,1168,1004],{"class":968},[324,1170,246],{"class":330},[324,1172,1010],{"class":1009},[324,1174,1013],{"class":330},[324,1176,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209],{"class":326,"line":380},[324,1178,974],{"class":330},[324,1180,977],{"class":968},[324,1182,246],{"class":330},[324,1184,615],{"class":330},[324,1186,1026],{"class":352},[324,1188,621],{"class":330},[324,1190,988],{"class":330},[324,1192,991],{"class":968},[324,1194,246],{"class":330},[324,1196,615],{"class":330},[324,1198,1039],{"class":352},[324,1200,621],{"class":330},[324,1202,988],{"class":330},[324,1204,1046],{"class":968},[324,1206,246],{"class":330},[324,1208,1010],{"class":1009},[324,1210,1013],{"class":330},[324,1212,1213,1215],{"class":326,"line":387},[324,1214,1057],{"class":968},[324,1216,358],{"class":330},[324,1218,1219],{"class":326,"line":542},[324,1220,1065],{"class":330},[392,1222,1224],{"id":1223},"write-the-new-docs","Write the new docs",[102,1226,1227,1228,1230],{},"Edit the unversioned ",[149,1229,925],{}," pages for v0.2 changes. Archived snapshots stay untouched.",[392,1232,1234],{"id":1233},"version-policy-for-docs","Version policy for docs",[248,1236,1237,1249,1256],{},[251,1238,1239,1240,239,1243,158,1245,1248],{},"Docs are versioned ",[106,1241,1242],{},"per gateway release line",[149,1244,1026],{},[149,1246,1247],{},"v0.2",", …), not per patch.",[251,1250,1251,1252,1255],{},"The unversioned docs always describe the ",[106,1253,1254],{},"latest"," release; never edit archived snapshots except for critical corrections.",[251,1257,1258],{},"Cross-version links should use unversioned URLs (they resolve to latest).",[229,1260,1262],{"id":1261},"quick-reference","Quick reference",[111,1264,1265,1275],{},[114,1266,1267],{},[117,1268,1269,1272],{},[120,1270,1271],{},"Question",[120,1273,1274],{},"Answer",[133,1276,1277,1288,1299,1307,1315],{},[117,1278,1279,1282],{},[138,1280,1281],{},"Which binary am I running?",[138,1283,1284,1285,1287],{},"Release version (",[149,1286,151],{}," \u002F Docker tag)",[117,1289,1290,1293],{},[138,1291,1292],{},"Which config produced this log line?",[138,1294,1295,1298],{},[149,1296,1297],{},".config_version"," in the JSONL line",[117,1300,1301,1304],{},[138,1302,1303],{},"Which IP data does this build embed?",[138,1305,1306],{},"Dataset vintages recorded in the release notes",[117,1308,1309,1312],{},[138,1310,1311],{},"Which docs match my gateway?",[138,1313,1314],{},"Use the version switcher; unversioned = latest",[117,1316,1317,1320],{},[138,1318,1319],{},"Did my config reload take effect?",[138,1321,1322,1323],{},"Stderr: ",[149,1324,1325],{},"Config hot-reloaded successfully  old_version=…  new_version=…",[1327,1328,1329],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":320,"searchDepth":334,"depth":334,"links":1331},[1332,1333,1339,1344,1353],{"id":231,"depth":334,"text":232},{"id":296,"depth":334,"text":1334,"children":1335},"The config_version system",[1336,1337,1338],{"id":394,"depth":361,"text":395},{"id":445,"depth":361,"text":446},{"id":547,"depth":361,"text":548},{"id":635,"depth":334,"text":193,"children":1340},[1341,1342,1343],{"id":648,"depth":361,"text":649},{"id":783,"depth":361,"text":784},{"id":808,"depth":361,"text":809},{"id":835,"depth":334,"text":836,"children":1345},[1346,1347,1348,1349,1350,1351,1352],{"id":842,"depth":361,"text":843},{"id":876,"depth":361,"text":877},{"id":1068,"depth":361,"text":1069},{"id":1078,"depth":361,"text":1079},{"id":1109,"depth":361,"text":1110},{"id":1223,"depth":361,"text":1224},{"id":1233,"depth":361,"text":1234},{"id":1261,"depth":334,"text":1262},"The full version system: gateway releases, config_version, embedded dataset versions, and documentation versions.","md",null,{},"\u002Fquayel-gateway\u002Fversioning",{"title":93,"description":1354},"quayel-gateway\u002F10.versioning","eAXys063XWU8FLR6fPxvX6ur_0Y1w6FgiaywbBRHJRk",[1356,1356],1791649767858]