[{"data":1,"prerenderedAt":1045},["ShallowReactive",2],{"docs-sections":3,"docs-page-\u002Fdocs\u002Fdeployment-values":123},[4,9,13,17,22,26,30,34,38,42,46,50,55,59,63,67,72,76,80,85,89,93,97,102,106,110,114,119],{"path":5,"title":6,"description":7,"group":8},"\u002Fdocs","Introduction","What tunables is, the problem it solves, and the principles it holds to.","Get started",{"path":10,"title":11,"description":12,"group":8},"\u002Fdocs\u002Fquickstart","Quickstart","Take one group of settings from constants to a screen with a history, in a Nuxt app on Postgres.",{"path":14,"title":15,"description":16,"group":8},"\u002Fdocs\u002Fpatterns","What it is for","The kinds of value tunables keeps — live limits, plans, per-workspace and per-person values, model choices, values that bound each other, costly switches — and the feature that does each.",{"path":18,"title":19,"description":20,"group":21},"\u002Fdocs\u002Fsettings-and-groups","Settings and groups","Declare each setting once, in a group edited beside what it affects, and read it with types.","Concepts",{"path":23,"title":24,"description":25,"group":21},"\u002Fdocs\u002Fkinds-and-units","Kinds and units","The eight kinds of setting, the built-in units, your own units, and how values are checked and read.",{"path":27,"title":28,"description":29,"group":21},"\u002Fdocs\u002Fchecks-and-guards","Checks and guards","Rules across settings, guards for what your app keeps, within for presets, confirmations for costly changes, and notes.",{"path":31,"title":32,"description":33,"group":21},"\u002Fdocs\u002Fhistory-and-restore","History and restore","Every change is a revision with who, when, why and each value before and after; restoring one runs the same checks as any save.",{"path":35,"title":36,"description":37,"group":21},"\u002Fdocs\u002Fpresets","Presets","Named, reusable configurations with one default per slot, assigned by reference and bounded by the settings.",{"path":39,"title":40,"description":41,"group":21},"\u002Fdocs\u002Fscopes","Scopes","Values per workspace and per person, through layers — the system, a plan, the workspace, the person — each bounded by what it inherits.",{"path":43,"title":44,"description":45,"group":21},"\u002Fdocs\u002Fcatalogs","Catalogs","Lists of allowed choices, such as permitted models, whose entries are retired rather than deleted and cannot be retired while in use.",{"path":47,"title":48,"description":49,"group":21},"\u002Fdocs\u002Fdeployment-values","Deployment values","Values a deployment sets in its environment and nobody tunes while the app runs, declared once and listed in .env.example.",{"path":51,"title":52,"description":53,"group":54},"\u002Fdocs\u002Fstorage","Storage","Postgres through your own client, the four tables and how to create them, joining your transactions, and the storage contract behind it.","Integrate",{"path":56,"title":57,"description":58,"group":54},"\u002Fdocs\u002Fserver","Server and access","Mount tunables' API as a fetch handler in Nitro, Hono, Bun or Deno, as Express middleware or as an oRPC router, with access decided by your app.",{"path":60,"title":61,"description":62,"group":54},"\u002Fdocs\u002Faccess","Who can do what","End users bound by values they never see, staff who tune groups, owners and members who change only their own scope, and the terminal.",{"path":64,"title":65,"description":66,"group":54},"\u002Fdocs\u002Ftesting","Testing","Your app's tunables in memory for its own tests, with values set where a test needs them, and how to test rules, guards and confirmations.",{"path":68,"title":69,"description":70,"group":71},"\u002Fdocs\u002Fnuxt-layer","The Nuxt layer","Ready screens for a Nuxt UI app — a group's form, All settings, history, presets, assignments and catalogs — placed beside what they affect.","Screens",{"path":73,"title":74,"description":75,"group":71},"\u002Fdocs\u002Fvue-composables","Vue composables","Headless composables for building tunables' screens in any Vue app, on any design system.",{"path":77,"title":78,"description":79,"group":71},"\u002Fdocs\u002Ftheming","Theming","The screens bring no colors, fonts or CSS of their own; they take your Nuxt UI theme.",{"path":81,"title":82,"description":83,"group":84},"\u002Fdocs\u002Fcli","The CLI","The tunables command, tunables.config.ts, and which commands need a database.","CLI",{"path":86,"title":87,"description":88,"group":84},"\u002Fdocs\u002Fcli-check","Check and generate","The commands that need no database — checking definitions, writing .env.example, and keeping explanations and defaults in step with a pdd-kit Product Model.",{"path":90,"title":91,"description":92,"group":84},"\u002Fdocs\u002Fcli-values","Read and change values","The commands that read and change stored values, through the same checks and history as the screens.",{"path":94,"title":95,"description":96,"group":84},"\u002Fdocs\u002Fcli-skills","Install skills","Install tunables' agent skills for Claude Code, Codex CLI, Cursor, Gemini CLI and GitHub Copilot, and keep them current.",{"path":98,"title":99,"description":100,"group":101},"\u002Fdocs\u002Fskills","Agent skills","Three skills that let a coding agent adopt tunables, define settings the right way and verify that every value has one home.","Skills",{"path":103,"title":104,"description":105,"group":101},"\u002Fdocs\u002Fskill-adopt","tunables-adopt","Bring tunables into an app that has none yet, from an inventory of every value to a wired, synced app with the old homes removed.",{"path":107,"title":108,"description":109,"group":101},"\u002Fdocs\u002Fskill-define","tunables-define","Add, change, rename or remove one value in an app that uses tunables, with its home, its checks, its reads and what happens to stored values.",{"path":111,"title":112,"description":113,"group":101},"\u002Fdocs\u002Fskill-verify","tunables-verify","Audit an app's tunables against their rules, report every finding with where it is and the rule it breaks, and fix only the findings you choose.",{"path":115,"title":116,"description":117,"group":118},"\u002Fdocs\u002Fapi","API reference","Every export of the tunables package, by the subpath it is imported from.","Reference",{"path":120,"title":121,"description":122,"group":118},"\u002Fdocs\u002Ftasklane-example","Tasklane, the example app","A todo app with workspaces and people as tunables — two groups, plans as a layer, a catalog of models, scopes, a rule, a confirmation, and the playground that runs it.",{"id":124,"title":48,"body":125,"description":49,"extension":1040,"group":21,"meta":1041,"navigation":247,"order":943,"path":47,"seo":1042,"stem":1043,"__hash__":1044},"docs\u002Fdocs\u002Fdeployment-values.md",{"type":126,"value":127,"toc":1034},"minimark",[128,132,141,146,157,185,188,192,592,724,742,746,749,834,843,851,858,861,866,884,947,953,1017,1030],[129,130,48],"h1",{"id":131},"deployment-values",[133,134,135,136,140],"p",{},"Not every value is a setting. A lock id, a batch size, a log level, the\ndatabase URL: a deployment sets these in its environment, and nobody tunes them\nwhile the app runs. tunables calls them ",[137,138,139],"strong",{},"deployment values",", and gives them\nthe same treatment as settings: declared once, with a description and a\ndefault, checked as a whole, and listed for whoever deploys the app.",[142,143,145],"h2",{"id":144},"one-home-per-value","One home per value",[133,147,148,149,152,153],{},"A value lives in the environment or in a group, ",[137,150,151],{},"never both",". There is no\nprecedence rule, because there is never a second place a value could come\nfrom. Ask one question of each value: ",[154,155,156],"em",{},"would anyone change this while the app\nruns, without a deploy?",[158,159,160,173,179],"ul",{},[161,162,163,166,167,172],"li",{},[137,164,165],{},"Yes:"," it is a setting. Put it in a ",[168,169,171],"a",{"href":170},".\u002Fsettings-and-groups","group",".",[161,174,175,178],{},[137,176,177],{},"No, but it differs per deployment, or it is a secret:"," it is a\ndeployment value.",[161,180,181,184],{},[137,182,183],{},"No, and it never differs:"," it is code. Layout geometry, format tables and\nprotocol constants stay where they are.",[133,186,187],{},"Moving a value from one home to the other deletes the old one in the same\nchange.",[142,189,191],{"id":190},"declaring-them","Declaring them",[193,194,200],"pre",{"className":195,"code":196,"filename":197,"language":198,"meta":199,"style":199},"language-ts shiki shiki-themes tunables-panel-light tunables-panel-light tunables-panel-dark","import { defineEnvironment, env } from 'tunables'\n\nexport const environment = defineEnvironment({\n  DATABASE_URL: env.string({ description: 'The Postgres the app and tunables share.', section: 'Infrastructure' }),\n  APP_LOCK_SCHEDULER: env.integer({ default: 7101, description: 'Advisory lock id the scheduler holds while it ticks.', section: 'Mechanics' }),\n  APP_QUERY_BATCH: env.integer({ default: 500, max: 5000, description: 'Rows written per statement when a batch is saved.', section: 'Mechanics' }),\n  APP_LOG_LEVEL: env.choice({ options: ['debug', 'info', 'warn', 'error'], default: 'info', description: 'How much the server and worker log.', section: 'Mechanics' }),\n  APP_TRACE: env.boolean({ default: false, description: 'Whether requests are traced.', section: 'Mechanics' })\n})\n","server\u002Fenvironment.ts","ts","",[201,202,203,242,249,270,322,375,435,534,586],"code",{"__ignoreMap":199},[204,205,208,212,216,220,223,226,229,232,235,239],"span",{"class":206,"line":207},"line",1,[204,209,211],{"class":210},"sZ4mS","import",[204,213,215],{"class":214},"sp9ci"," {",[204,217,219],{"class":218},"sVz71"," defineEnvironment",[204,221,222],{"class":214},",",[204,224,225],{"class":218}," env ",[204,227,228],{"class":214},"}",[204,230,231],{"class":210}," from",[204,233,234],{"class":214}," '",[204,236,238],{"class":237},"sjCzm","tunables",[204,240,241],{"class":214},"'\n",[204,243,245],{"class":206,"line":244},2,[204,246,248],{"emptyLinePlaceholder":247},true,"\n",[204,250,252,255,258,261,264,267],{"class":206,"line":251},3,[204,253,254],{"class":210},"export",[204,256,257],{"class":210}," const",[204,259,260],{"class":218}," environment ",[204,262,263],{"class":214},"=",[204,265,219],{"class":266},"sOThN",[204,268,269],{"class":214},"({\n",[204,271,273,276,279,283,286,289,292,295,297,299,302,305,307,310,312,314,317,319],{"class":206,"line":272},4,[204,274,275],{"class":218},"  DATABASE_URL",[204,277,278],{"class":214},":",[204,280,282],{"class":281},"sq0K3"," env",[204,284,172],{"class":285},"sBd0f",[204,287,288],{"class":266},"string",[204,290,291],{"class":214},"({",[204,293,294],{"class":218}," description",[204,296,278],{"class":214},[204,298,234],{"class":214},[204,300,301],{"class":237},"The Postgres the app and tunables share.",[204,303,304],{"class":214},"'",[204,306,222],{"class":214},[204,308,309],{"class":218}," section",[204,311,278],{"class":214},[204,313,234],{"class":214},[204,315,316],{"class":237},"Infrastructure",[204,318,304],{"class":214},[204,320,321],{"class":214}," }),\n",[204,323,325,328,330,332,334,337,339,342,344,347,349,351,353,355,358,360,362,364,366,368,371,373],{"class":206,"line":324},5,[204,326,327],{"class":218},"  APP_LOCK_SCHEDULER",[204,329,278],{"class":214},[204,331,282],{"class":281},[204,333,172],{"class":285},[204,335,336],{"class":266},"integer",[204,338,291],{"class":214},[204,340,341],{"class":218}," default",[204,343,278],{"class":214},[204,345,346],{"class":237}," 7101",[204,348,222],{"class":214},[204,350,294],{"class":218},[204,352,278],{"class":214},[204,354,234],{"class":214},[204,356,357],{"class":237},"Advisory lock id the scheduler holds while it ticks.",[204,359,304],{"class":214},[204,361,222],{"class":214},[204,363,309],{"class":218},[204,365,278],{"class":214},[204,367,234],{"class":214},[204,369,370],{"class":237},"Mechanics",[204,372,304],{"class":214},[204,374,321],{"class":214},[204,376,378,381,383,385,387,389,391,393,395,398,400,403,405,408,410,412,414,416,419,421,423,425,427,429,431,433],{"class":206,"line":377},6,[204,379,380],{"class":218},"  APP_QUERY_BATCH",[204,382,278],{"class":214},[204,384,282],{"class":281},[204,386,172],{"class":285},[204,388,336],{"class":266},[204,390,291],{"class":214},[204,392,341],{"class":218},[204,394,278],{"class":214},[204,396,397],{"class":237}," 500",[204,399,222],{"class":214},[204,401,402],{"class":218}," max",[204,404,278],{"class":214},[204,406,407],{"class":237}," 5000",[204,409,222],{"class":214},[204,411,294],{"class":218},[204,413,278],{"class":214},[204,415,234],{"class":214},[204,417,418],{"class":237},"Rows written per statement when a batch is saved.",[204,420,304],{"class":214},[204,422,222],{"class":214},[204,424,309],{"class":218},[204,426,278],{"class":214},[204,428,234],{"class":214},[204,430,370],{"class":237},[204,432,304],{"class":214},[204,434,321],{"class":214},[204,436,438,441,443,445,447,450,452,455,457,460,462,465,467,469,471,474,476,478,480,483,485,487,489,492,494,497,499,501,503,505,507,509,511,513,515,518,520,522,524,526,528,530,532],{"class":206,"line":437},7,[204,439,440],{"class":218},"  APP_LOG_LEVEL",[204,442,278],{"class":214},[204,444,282],{"class":281},[204,446,172],{"class":285},[204,448,449],{"class":266},"choice",[204,451,291],{"class":214},[204,453,454],{"class":218}," options",[204,456,278],{"class":214},[204,458,459],{"class":214}," [",[204,461,304],{"class":214},[204,463,464],{"class":237},"debug",[204,466,304],{"class":214},[204,468,222],{"class":214},[204,470,234],{"class":214},[204,472,473],{"class":237},"info",[204,475,304],{"class":214},[204,477,222],{"class":214},[204,479,234],{"class":214},[204,481,482],{"class":237},"warn",[204,484,304],{"class":214},[204,486,222],{"class":214},[204,488,234],{"class":214},[204,490,491],{"class":237},"error",[204,493,304],{"class":214},[204,495,496],{"class":214},"],",[204,498,341],{"class":218},[204,500,278],{"class":214},[204,502,234],{"class":214},[204,504,473],{"class":237},[204,506,304],{"class":214},[204,508,222],{"class":214},[204,510,294],{"class":218},[204,512,278],{"class":214},[204,514,234],{"class":214},[204,516,517],{"class":237},"How much the server and worker log.",[204,519,304],{"class":214},[204,521,222],{"class":214},[204,523,309],{"class":218},[204,525,278],{"class":214},[204,527,234],{"class":214},[204,529,370],{"class":237},[204,531,304],{"class":214},[204,533,321],{"class":214},[204,535,537,540,542,544,546,549,551,553,555,558,560,562,564,566,569,571,573,575,577,579,581,583],{"class":206,"line":536},8,[204,538,539],{"class":218},"  APP_TRACE",[204,541,278],{"class":214},[204,543,282],{"class":281},[204,545,172],{"class":285},[204,547,548],{"class":266},"boolean",[204,550,291],{"class":214},[204,552,341],{"class":218},[204,554,278],{"class":214},[204,556,557],{"class":210}," false",[204,559,222],{"class":214},[204,561,294],{"class":218},[204,563,278],{"class":214},[204,565,234],{"class":214},[204,567,568],{"class":237},"Whether requests are traced.",[204,570,304],{"class":214},[204,572,222],{"class":214},[204,574,309],{"class":218},[204,576,278],{"class":214},[204,578,234],{"class":214},[204,580,370],{"class":237},[204,582,304],{"class":214},[204,584,585],{"class":214}," })\n",[204,587,589],{"class":206,"line":588},9,[204,590,591],{"class":214},"})\n",[593,594,595,611],"table",{},[596,597,598],"thead",{},[599,600,601,605,608],"tr",{},[602,603,604],"th",{},"Builder",[602,606,607],{},"Value",[602,609,610],{},"Accepts",[612,613,614,629,651,669,708],"tbody",{},[599,615,616,622,626],{},[617,618,619],"td",{},[201,620,621],{},"env.string",[617,623,624],{},[201,625,288],{},[617,627,628],{},"any text",[599,630,631,636,641],{},[617,632,633],{},[201,634,635],{},"env.integer",[617,637,638],{},[201,639,640],{},"number",[617,642,643,644,647,648],{},"a whole number, at least 1 unless ",[201,645,646],{},"min"," says otherwise, at most ",[201,649,650],{},"max",[599,652,653,658,662],{},[617,654,655],{},[201,656,657],{},"env.number",[617,659,660],{},[201,661,640],{},[617,663,664,665,647,667],{},"a number more than 0 unless ",[201,666,646],{},[201,668,650],{},[599,670,671,676,680],{},[617,672,673],{},[201,674,675],{},"env.boolean",[617,677,678],{},[201,679,548],{},[617,681,682,685,686,685,689,685,692,695,696,685,699,685,702,685,705],{},[201,683,684],{},"1",", ",[201,687,688],{},"true",[201,690,691],{},"yes",[201,693,694],{},"on"," or ",[201,697,698],{},"0",[201,700,701],{},"false",[201,703,704],{},"no",[201,706,707],{},"off",[599,709,710,715,721],{},[617,711,712],{},[201,713,714],{},"env.choice",[617,716,717,718],{},"one of ",[201,719,720],{},"options",[617,722,723],{},"one of the options, exactly",[133,725,726,727,730,731,734,735,738,739,172],{},"Each takes a ",[201,728,729],{},"description",", a ",[201,732,733],{},"default"," unless it must be set, and a ",[201,736,737],{},"section","\nit is listed under in ",[201,740,741],{},".env.example",[142,743,745],{"id":744},"reading-them","Reading them",[133,747,748],{},"Read them once at start. No database is involved.",[193,750,752],{"className":195,"code":751,"language":198,"meta":199,"style":199},"const config = environment.read() \u002F\u002F every value, checked at once\nconfig.APP_QUERY_BATCH \u002F\u002F number\nconfig.APP_LOG_LEVEL \u002F\u002F 'debug' | 'info' | 'warn' | 'error'\n\nenvironment.get('APP_LOCK_SCHEDULER') \u002F\u002F one value\n",[201,753,754,779,792,804,808],{"__ignoreMap":199},[204,755,756,759,762,764,767,769,772,775],{"class":206,"line":207},[204,757,758],{"class":210},"const",[204,760,761],{"class":218}," config ",[204,763,263],{"class":214},[204,765,766],{"class":281}," environment",[204,768,172],{"class":285},[204,770,771],{"class":266},"read",[204,773,774],{"class":214},"()",[204,776,778],{"class":777},"sKllz"," \u002F\u002F every value, checked at once\n",[204,780,781,784,786,789],{"class":206,"line":244},[204,782,783],{"class":218},"config",[204,785,172],{"class":214},[204,787,788],{"class":218},"APP_QUERY_BATCH ",[204,790,791],{"class":777},"\u002F\u002F number\n",[204,793,794,796,798,801],{"class":206,"line":251},[204,795,783],{"class":218},[204,797,172],{"class":214},[204,799,800],{"class":218},"APP_LOG_LEVEL ",[204,802,803],{"class":777},"\u002F\u002F 'debug' | 'info' | 'warn' | 'error'\n",[204,805,806],{"class":206,"line":272},[204,807,248],{"emptyLinePlaceholder":247},[204,809,810,813,815,818,821,823,826,828,831],{"class":206,"line":324},[204,811,812],{"class":281},"environment",[204,814,172],{"class":285},[204,816,817],{"class":266},"get",[204,819,820],{"class":214},"(",[204,822,304],{"class":214},[204,824,825],{"class":237},"APP_LOCK_SCHEDULER",[204,827,304],{"class":214},[204,829,830],{"class":214},")",[204,832,833],{"class":777}," \u002F\u002F one value\n",[133,835,836,838,839,842],{},[201,837,771],{}," checks every value and throws one ",[201,840,841],{},"EnvironmentError"," naming each that\nis missing or malformed, so a bad deployment fails at start with the whole\nlist, not one variable at a time:",[193,844,849],{"className":845,"code":847,"language":848},[846],"language-text","The environment is not valid:\n- DATABASE_URL: is required and not set.\n- APP_QUERY_BATCH: may not be more than 5000.\n","text",[201,850,847],{"__ignoreMap":199},[133,852,853,854,857],{},"Both read ",[201,855,856],{},"process.env"," unless you pass another source.",[142,859,741],{"id":860},"envexample",[133,862,863,865],{},[201,864,741],{}," is written from the declarations, never by hand. Each value\nappears under its section, with its description, commented out at its default;\none without a default is left uncommented and empty, because it must be set.",[193,867,871],{"className":868,"code":869,"language":870,"meta":199,"style":199},"language-bash shiki shiki-themes tunables-panel-light tunables-panel-light tunables-panel-dark","npx tunables env\n","bash",[201,872,873],{"__ignoreMap":199},[204,874,875,878,881],{"class":206,"line":207},[204,876,877],{"class":266},"npx",[204,879,880],{"class":237}," tunables",[204,882,883],{"class":237}," env\n",[193,885,889],{"className":886,"code":887,"filename":741,"language":888,"meta":199,"style":199},"language-ini shiki shiki-themes tunables-panel-light tunables-panel-light tunables-panel-dark","# Deployment values. Settings an administrator tunes live in the database.\n\n# --- Infrastructure\n\n# The Postgres the app and tunables share.\nDATABASE_URL=\n\n# --- Mechanics\n\n# Advisory lock id the scheduler holds while it ticks.\n# APP_LOCK_SCHEDULER=7101\n","ini",[201,890,891,896,900,905,909,914,922,926,931,935,941],{"__ignoreMap":199},[204,892,893],{"class":206,"line":207},[204,894,895],{"class":777},"# Deployment values. Settings an administrator tunes live in the database.\n",[204,897,898],{"class":206,"line":244},[204,899,248],{"emptyLinePlaceholder":247},[204,901,902],{"class":206,"line":251},[204,903,904],{"class":777},"# --- Infrastructure\n",[204,906,907],{"class":206,"line":272},[204,908,248],{"emptyLinePlaceholder":247},[204,910,911],{"class":206,"line":324},[204,912,913],{"class":777},"# The Postgres the app and tunables share.\n",[204,915,916,919],{"class":206,"line":377},[204,917,918],{"class":210},"DATABASE_URL",[204,920,921],{"class":214},"=\n",[204,923,924],{"class":206,"line":437},[204,925,248],{"emptyLinePlaceholder":247},[204,927,928],{"class":206,"line":536},[204,929,930],{"class":777},"# --- Mechanics\n",[204,932,933],{"class":206,"line":588},[204,934,248],{"emptyLinePlaceholder":247},[204,936,938],{"class":206,"line":937},10,[204,939,940],{"class":777},"# Advisory lock id the scheduler holds while it ticks.\n",[204,942,944],{"class":206,"line":943},11,[204,945,946],{"class":777},"# APP_LOCK_SCHEDULER=7101\n",[133,948,949,950,278],{},"Name the file and its header in ",[201,951,952],{},"tunables.config.ts",[193,954,956],{"className":195,"code":955,"filename":952,"language":198,"meta":199,"style":199},"export default defineConfig({\n  groups,\n  environment,\n  envExample: '.env.example',\n  envHeader: 'Deployment values. Settings an administrator tunes live in the database.'\n})\n",[201,957,958,969,977,984,999,1013],{"__ignoreMap":199},[204,959,960,962,964,967],{"class":206,"line":207},[204,961,254],{"class":210},[204,963,341],{"class":210},[204,965,966],{"class":266}," defineConfig",[204,968,269],{"class":214},[204,970,971,974],{"class":206,"line":244},[204,972,973],{"class":218},"  groups",[204,975,976],{"class":214},",\n",[204,978,979,982],{"class":206,"line":251},[204,980,981],{"class":218},"  environment",[204,983,976],{"class":214},[204,985,986,989,991,993,995,997],{"class":206,"line":272},[204,987,988],{"class":218},"  envExample",[204,990,278],{"class":214},[204,992,234],{"class":214},[204,994,741],{"class":237},[204,996,304],{"class":214},[204,998,976],{"class":214},[204,1000,1001,1004,1006,1008,1011],{"class":206,"line":324},[204,1002,1003],{"class":218},"  envHeader",[204,1005,278],{"class":214},[204,1007,234],{"class":214},[204,1009,1010],{"class":237},"Deployment values. Settings an administrator tunes live in the database.",[204,1012,241],{"class":214},[204,1014,1015],{"class":206,"line":377},[204,1016,591],{"class":214},[133,1018,1019,1022,1023,1025,1026,1029],{},[201,1020,1021],{},"tunables check"," fails when ",[201,1024,741],{}," does not list the values as\ndeclared, so a new variable cannot ship undocumented. ",[201,1027,1028],{},"renderEnvExample"," gives\nyou the same text in code.",[1031,1032,1033],"style",{},"html pre.shiki code .sZ4mS, html code.shiki .sZ4mS{--shiki-light:#115E59;--shiki-default:#115E59;--shiki-dark:#5EEAD4}html pre.shiki code .sp9ci, html code.shiki .sp9ci{--shiki-light:#4F5D63;--shiki-default:#4F5D63;--shiki-dark:#A3AFB4}html pre.shiki code .sVz71, html code.shiki .sVz71{--shiki-light:#182025;--shiki-default:#182025;--shiki-dark:#E6EBEC}html pre.shiki code .sjCzm, html code.shiki .sjCzm{--shiki-light:#92400E;--shiki-default:#92400E;--shiki-dark:#FCD34D}html pre.shiki code .sOThN, html code.shiki .sOThN{--shiki-light:#2A3439;--shiki-light-font-weight:bold;--shiki-default:#2A3439;--shiki-default-font-weight:bold;--shiki-dark:#F6F8F8;--shiki-dark-font-weight:bold}html pre.shiki code .sq0K3, html code.shiki .sq0K3{--shiki-light:#182025;--shiki-light-font-weight:bold;--shiki-default:#182025;--shiki-default-font-weight:bold;--shiki-dark:#E6EBEC;--shiki-dark-font-weight:bold}html pre.shiki code .sBd0f, html code.shiki .sBd0f{--shiki-light:#4F5D63;--shiki-light-font-weight:bold;--shiki-default:#4F5D63;--shiki-default-font-weight:bold;--shiki-dark:#A3AFB4;--shiki-dark-font-weight:bold}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 .sKllz, html code.shiki .sKllz{--shiki-light:#4F5D63;--shiki-light-font-style:italic;--shiki-default:#4F5D63;--shiki-default-font-style:italic;--shiki-dark:#A3AFB4;--shiki-dark-font-style:italic}",{"title":199,"searchDepth":244,"depth":244,"links":1035},[1036,1037,1038,1039],{"id":144,"depth":244,"text":145},{"id":190,"depth":244,"text":191},{"id":744,"depth":244,"text":745},{"id":860,"depth":244,"text":741},"md",{},{"title":48,"description":49},"docs\u002Fdeployment-values","jVPXLVL9zsP5_AodBVcwX49OKoAoonXpuAApRc_w9BQ",1792845119305]