[{"data":1,"prerenderedAt":3222},["ShallowReactive",2],{"docs-sections":3,"docs-page-\u002Fdocs\u002Ftasklane-example":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":121,"body":125,"description":122,"extension":3216,"group":118,"meta":3217,"navigation":455,"order":3218,"path":120,"seo":3219,"stem":3220,"__hash__":3221},"docs\u002Fdocs\u002Ftasklane-example.md",{"type":126,"value":127,"toc":3205},"minimark",[128,132,140,170,239,244,584,610,613,620,1119,1122,1126,1136,1585,1588,1668,1674,1676,1679,2376,2395,2399,2402,2765,2773,2777,2780,2905,2915,2919,2926,2993,3004,3032,3039,3043,3046,3093,3111,3115,3123,3201],[129,130,121],"h1",{"id":131},"tasklane-the-example-app",[133,134,135,139],"p",{},[136,137,138],"strong",{},"Tasklane"," is a todo app: workspaces hold projects, projects hold tasks, and\nan AI model can suggest tasks. Its staff tune the system and the plans; each\nworkspace's owner sets their workspace's own values within what its plan\nallows; each person sets their own preferences. It is small, and it uses\nnearly everything tunables has.",[133,141,142,143,153,154,161,162,169],{},"Its definitions are\n",[144,145,149],"a",{"href":146,"rel":147},"https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Ftunables\u002Fblob\u002Fmain\u002Fexamples\u002Ftasklane\u002Ftunables.ts",[148],"nofollow",[150,151,152],"code",{},"examples\u002Ftasklane\u002Ftunables.ts",",\nits access policy\n",[144,155,158],{"href":156,"rel":157},"https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Ftunables\u002Fblob\u002Fmain\u002Fexamples\u002Ftasklane\u002Faccess.ts",[148],[150,159,160],{},"examples\u002Ftasklane\u002Faccess.ts",",\nand its CLI config\n",[144,163,166],{"href":164,"rel":165},"https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Ftunables\u002Fblob\u002Fmain\u002Fexamples\u002Ftasklane\u002Ftunables.config.ts",[148],[150,167,168],{},"examples\u002Ftasklane\u002Ftunables.config.ts",".\nThe docs, the playground, the server examples and the scoped tests use it.",[171,172,173,186],"table",{},[174,175,176],"thead",{},[177,178,179,183],"tr",{},[180,181,182],"th",{},"What",[180,184,185],{},"Holds",[187,188,189,198,206,218,226],"tbody",{},[177,190,191,195],{},[192,193,194],"td",{},"Limits",[192,196,197],{},"4 settings: how much a workspace may hold and use, bounded by its plan",[177,199,200,203],{},[192,201,202],{},"Workspace",[192,204,205],{},"7 settings: how a workspace works, some per workspace, some per person",[177,207,208,211],{},[192,209,210],{},"Plans",[192,212,213,214,217],{},"Presets for the ",[150,215,216],{},"plan"," slot: Free, Pro and Team, a layer of Limits at the workspace",[177,219,220,223],{},[192,221,222],{},"Models",[192,224,225],{},"A catalog of the models that may draft task suggestions",[177,227,228,230],{},[192,229,40],{},[192,231,232,235,236],{},[150,233,234],{},"workspace",", then ",[150,237,238],{},"user",[240,241,243],"h2",{"id":242},"effects-and-scopes","Effects and scopes",[245,246,251],"pre",{"className":247,"code":248,"language":249,"meta":250,"style":250},"language-ts shiki shiki-themes tunables-panel-light tunables-panel-light tunables-panel-dark","export const effects = defineEffects({\n  members: { label: 'What everyone in the workspace sees', icon: 'i-lucide-users' },\n  person: { label: 'Only this person', icon: 'i-lucide-user' },\n  storage: { label: 'Storage the workspace uses', icon: 'i-lucide-hard-drive' },\n  cost: { label: 'AI cost', warn: true, icon: 'i-lucide-coins' }\n})\n\nexport const scopes = ['workspace', 'user'] as const\n\nexport const scopeLabel = (scope: string, id: string) => names[`${scope}:${id}`] ?? `${scope} ${id}`\n","ts","",[150,252,253,280,325,361,397,444,450,457,495,500],{"__ignoreMap":250},[254,255,258,262,265,269,273,277],"span",{"class":256,"line":257},"line",1,[254,259,261],{"class":260},"sZ4mS","export",[254,263,264],{"class":260}," const",[254,266,268],{"class":267},"sVz71"," effects ",[254,270,272],{"class":271},"sp9ci","=",[254,274,276],{"class":275},"sOThN"," defineEffects",[254,278,279],{"class":271},"({\n",[254,281,283,286,289,292,295,297,300,304,307,310,313,315,317,320,322],{"class":256,"line":282},2,[254,284,285],{"class":267},"  members",[254,287,288],{"class":271},":",[254,290,291],{"class":271}," {",[254,293,294],{"class":267}," label",[254,296,288],{"class":271},[254,298,299],{"class":271}," '",[254,301,303],{"class":302},"sjCzm","What everyone in the workspace sees",[254,305,306],{"class":271},"'",[254,308,309],{"class":271},",",[254,311,312],{"class":267}," icon",[254,314,288],{"class":271},[254,316,299],{"class":271},[254,318,319],{"class":302},"i-lucide-users",[254,321,306],{"class":271},[254,323,324],{"class":271}," },\n",[254,326,328,331,333,335,337,339,341,344,346,348,350,352,354,357,359],{"class":256,"line":327},3,[254,329,330],{"class":267},"  person",[254,332,288],{"class":271},[254,334,291],{"class":271},[254,336,294],{"class":267},[254,338,288],{"class":271},[254,340,299],{"class":271},[254,342,343],{"class":302},"Only this person",[254,345,306],{"class":271},[254,347,309],{"class":271},[254,349,312],{"class":267},[254,351,288],{"class":271},[254,353,299],{"class":271},[254,355,356],{"class":302},"i-lucide-user",[254,358,306],{"class":271},[254,360,324],{"class":271},[254,362,364,367,369,371,373,375,377,380,382,384,386,388,390,393,395],{"class":256,"line":363},4,[254,365,366],{"class":267},"  storage",[254,368,288],{"class":271},[254,370,291],{"class":271},[254,372,294],{"class":267},[254,374,288],{"class":271},[254,376,299],{"class":271},[254,378,379],{"class":302},"Storage the workspace uses",[254,381,306],{"class":271},[254,383,309],{"class":271},[254,385,312],{"class":267},[254,387,288],{"class":271},[254,389,299],{"class":271},[254,391,392],{"class":302},"i-lucide-hard-drive",[254,394,306],{"class":271},[254,396,324],{"class":271},[254,398,400,403,405,407,409,411,413,416,418,420,423,425,428,430,432,434,436,439,441],{"class":256,"line":399},5,[254,401,402],{"class":267},"  cost",[254,404,288],{"class":271},[254,406,291],{"class":271},[254,408,294],{"class":267},[254,410,288],{"class":271},[254,412,299],{"class":271},[254,414,415],{"class":302},"AI cost",[254,417,306],{"class":271},[254,419,309],{"class":271},[254,421,422],{"class":267}," warn",[254,424,288],{"class":271},[254,426,427],{"class":260}," true",[254,429,309],{"class":271},[254,431,312],{"class":267},[254,433,288],{"class":271},[254,435,299],{"class":271},[254,437,438],{"class":302},"i-lucide-coins",[254,440,306],{"class":271},[254,442,443],{"class":271}," }\n",[254,445,447],{"class":256,"line":446},6,[254,448,449],{"class":271},"})\n",[254,451,453],{"class":256,"line":452},7,[254,454,456],{"emptyLinePlaceholder":455},true,"\n",[254,458,460,462,464,467,469,472,474,476,478,480,482,484,486,489,492],{"class":256,"line":459},8,[254,461,261],{"class":260},[254,463,264],{"class":260},[254,465,466],{"class":267}," scopes ",[254,468,272],{"class":271},[254,470,471],{"class":271}," [",[254,473,306],{"class":271},[254,475,234],{"class":302},[254,477,306],{"class":271},[254,479,309],{"class":271},[254,481,299],{"class":271},[254,483,238],{"class":302},[254,485,306],{"class":271},[254,487,488],{"class":271},"]",[254,490,491],{"class":260}," as",[254,493,494],{"class":260}," const\n",[254,496,498],{"class":256,"line":497},9,[254,499,456],{"emptyLinePlaceholder":455},[254,501,503,505,507,510,513,516,519,521,524,526,529,531,533,536,539,542,545,548,550,553,555,558,561,564,566,569,572,574,576,579,581],{"class":256,"line":502},10,[254,504,261],{"class":260},[254,506,264],{"class":260},[254,508,509],{"class":275}," scopeLabel",[254,511,512],{"class":271}," =",[254,514,515],{"class":271}," (",[254,517,518],{"class":267},"scope",[254,520,288],{"class":271},[254,522,523],{"class":275}," string",[254,525,309],{"class":271},[254,527,528],{"class":267}," id",[254,530,288],{"class":271},[254,532,523],{"class":275},[254,534,535],{"class":271},")",[254,537,538],{"class":260}," =>",[254,540,541],{"class":267}," names",[254,543,544],{"class":271},"[",[254,546,547],{"class":271},"`${",[254,549,518],{"class":267},[254,551,552],{"class":271},"}",[254,554,288],{"class":302},[254,556,557],{"class":271},"${",[254,559,560],{"class":267},"id",[254,562,563],{"class":271},"}`",[254,565,488],{"class":271},[254,567,568],{"class":271}," ??",[254,570,571],{"class":271}," `${",[254,573,518],{"class":267},[254,575,552],{"class":271},[254,577,578],{"class":271}," ${",[254,580,560],{"class":267},[254,582,583],{"class":271},"}`\n",[133,585,586,589,590,593,594,598,599,593,602,605,606,609],{},[150,587,588],{},"names"," maps ",[150,591,592],{},"workspace:acme"," to ",[595,596,597],"em",{},"Acme"," and ",[150,600,601],{},"user:dana",[595,603,604],{},"Dana",", so a\nrefusal says ",[595,607,608],{},"\"Acme keeps Projects at 20, above 10.\""," rather than naming keys.\nA real app would look the names up.",[240,611,194],{"id":612},"limits",[133,614,615,616,619],{},"How much a workspace may hold. Each limit may be lowered by a workspace, never\nraised; ",[595,617,618],{},"AI suggestions a day"," may be lowered by a person, too.",[245,621,623],{"className":247,"code":622,"language":249,"meta":250,"style":250},"export const limits = defineGroup({\n  id: 'limits',\n  title: 'Limits',\n  place: { label: 'Admin › Limits', href: '\u002Fadmin\u002Flimits' },\n  fields: {\n    maxProjects: number({ label: 'Projects', unit: 'count', default: 3, max: 10000, affects: ['members'], override: { workspace: 'at-most' } }),\n    maxTasksPerProject: number({ label: 'Tasks per project', unit: 'count', default: 200, max: 100000, affects: ['members'], override: { workspace: 'at-most' } }),\n    attachmentMb: number({ label: 'Attachment size', unit: 'megabytes', default: 10, max: 2048, affects: ['storage'], override: { workspace: 'at-most' } }),\n    aiSuggestionsPerDay: number({ label: 'AI suggestions a day', unit: 'count', default: 20, min: 0, max: 10000, affects: ['cost'], override: { workspace: 'at-most', user: 'at-most' } })\n  }\n})\n",[150,624,625,641,657,672,708,718,820,908,998,1109,1114],{"__ignoreMap":250},[254,626,627,629,631,634,636,639],{"class":256,"line":257},[254,628,261],{"class":260},[254,630,264],{"class":260},[254,632,633],{"class":267}," limits ",[254,635,272],{"class":271},[254,637,638],{"class":275}," defineGroup",[254,640,279],{"class":271},[254,642,643,646,648,650,652,654],{"class":256,"line":282},[254,644,645],{"class":267},"  id",[254,647,288],{"class":271},[254,649,299],{"class":271},[254,651,612],{"class":302},[254,653,306],{"class":271},[254,655,656],{"class":271},",\n",[254,658,659,662,664,666,668,670],{"class":256,"line":327},[254,660,661],{"class":267},"  title",[254,663,288],{"class":271},[254,665,299],{"class":271},[254,667,194],{"class":302},[254,669,306],{"class":271},[254,671,656],{"class":271},[254,673,674,677,679,681,683,685,687,690,692,694,697,699,701,704,706],{"class":256,"line":363},[254,675,676],{"class":267},"  place",[254,678,288],{"class":271},[254,680,291],{"class":271},[254,682,294],{"class":267},[254,684,288],{"class":271},[254,686,299],{"class":271},[254,688,689],{"class":302},"Admin › Limits",[254,691,306],{"class":271},[254,693,309],{"class":271},[254,695,696],{"class":267}," href",[254,698,288],{"class":271},[254,700,299],{"class":271},[254,702,703],{"class":302},"\u002Fadmin\u002Flimits",[254,705,306],{"class":271},[254,707,324],{"class":271},[254,709,710,713,715],{"class":256,"line":399},[254,711,712],{"class":267},"  fields",[254,714,288],{"class":271},[254,716,717],{"class":271}," {\n",[254,719,720,723,725,728,731,733,735,737,740,742,744,747,749,751,754,756,758,761,763,766,768,771,773,776,778,781,783,785,787,790,792,795,798,800,802,805,807,809,812,814,817],{"class":256,"line":446},[254,721,722],{"class":267},"    maxProjects",[254,724,288],{"class":271},[254,726,727],{"class":275}," number",[254,729,730],{"class":271},"({",[254,732,294],{"class":267},[254,734,288],{"class":271},[254,736,299],{"class":271},[254,738,739],{"class":302},"Projects",[254,741,306],{"class":271},[254,743,309],{"class":271},[254,745,746],{"class":267}," unit",[254,748,288],{"class":271},[254,750,299],{"class":271},[254,752,753],{"class":302},"count",[254,755,306],{"class":271},[254,757,309],{"class":271},[254,759,760],{"class":267}," default",[254,762,288],{"class":271},[254,764,765],{"class":302}," 3",[254,767,309],{"class":271},[254,769,770],{"class":267}," max",[254,772,288],{"class":271},[254,774,775],{"class":302}," 10000",[254,777,309],{"class":271},[254,779,780],{"class":267}," affects",[254,782,288],{"class":271},[254,784,471],{"class":271},[254,786,306],{"class":271},[254,788,789],{"class":302},"members",[254,791,306],{"class":271},[254,793,794],{"class":271},"],",[254,796,797],{"class":267}," override",[254,799,288],{"class":271},[254,801,291],{"class":271},[254,803,804],{"class":267}," workspace",[254,806,288],{"class":271},[254,808,299],{"class":271},[254,810,811],{"class":302},"at-most",[254,813,306],{"class":271},[254,815,816],{"class":271}," }",[254,818,819],{"class":271}," }),\n",[254,821,822,825,827,829,831,833,835,837,840,842,844,846,848,850,852,854,856,858,860,863,865,867,869,872,874,876,878,880,882,884,886,888,890,892,894,896,898,900,902,904,906],{"class":256,"line":452},[254,823,824],{"class":267},"    maxTasksPerProject",[254,826,288],{"class":271},[254,828,727],{"class":275},[254,830,730],{"class":271},[254,832,294],{"class":267},[254,834,288],{"class":271},[254,836,299],{"class":271},[254,838,839],{"class":302},"Tasks per project",[254,841,306],{"class":271},[254,843,309],{"class":271},[254,845,746],{"class":267},[254,847,288],{"class":271},[254,849,299],{"class":271},[254,851,753],{"class":302},[254,853,306],{"class":271},[254,855,309],{"class":271},[254,857,760],{"class":267},[254,859,288],{"class":271},[254,861,862],{"class":302}," 200",[254,864,309],{"class":271},[254,866,770],{"class":267},[254,868,288],{"class":271},[254,870,871],{"class":302}," 100000",[254,873,309],{"class":271},[254,875,780],{"class":267},[254,877,288],{"class":271},[254,879,471],{"class":271},[254,881,306],{"class":271},[254,883,789],{"class":302},[254,885,306],{"class":271},[254,887,794],{"class":271},[254,889,797],{"class":267},[254,891,288],{"class":271},[254,893,291],{"class":271},[254,895,804],{"class":267},[254,897,288],{"class":271},[254,899,299],{"class":271},[254,901,811],{"class":302},[254,903,306],{"class":271},[254,905,816],{"class":271},[254,907,819],{"class":271},[254,909,910,913,915,917,919,921,923,925,928,930,932,934,936,938,941,943,945,947,949,952,954,956,958,961,963,965,967,969,971,974,976,978,980,982,984,986,988,990,992,994,996],{"class":256,"line":459},[254,911,912],{"class":267},"    attachmentMb",[254,914,288],{"class":271},[254,916,727],{"class":275},[254,918,730],{"class":271},[254,920,294],{"class":267},[254,922,288],{"class":271},[254,924,299],{"class":271},[254,926,927],{"class":302},"Attachment size",[254,929,306],{"class":271},[254,931,309],{"class":271},[254,933,746],{"class":267},[254,935,288],{"class":271},[254,937,299],{"class":271},[254,939,940],{"class":302},"megabytes",[254,942,306],{"class":271},[254,944,309],{"class":271},[254,946,760],{"class":267},[254,948,288],{"class":271},[254,950,951],{"class":302}," 10",[254,953,309],{"class":271},[254,955,770],{"class":267},[254,957,288],{"class":271},[254,959,960],{"class":302}," 2048",[254,962,309],{"class":271},[254,964,780],{"class":267},[254,966,288],{"class":271},[254,968,471],{"class":271},[254,970,306],{"class":271},[254,972,973],{"class":302},"storage",[254,975,306],{"class":271},[254,977,794],{"class":271},[254,979,797],{"class":267},[254,981,288],{"class":271},[254,983,291],{"class":271},[254,985,804],{"class":267},[254,987,288],{"class":271},[254,989,299],{"class":271},[254,991,811],{"class":302},[254,993,306],{"class":271},[254,995,816],{"class":271},[254,997,819],{"class":271},[254,999,1000,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037,1040,1042,1045,1047,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1096,1098,1100,1102,1104,1106],{"class":256,"line":497},[254,1001,1002],{"class":267},"    aiSuggestionsPerDay",[254,1004,288],{"class":271},[254,1006,727],{"class":275},[254,1008,730],{"class":271},[254,1010,294],{"class":267},[254,1012,288],{"class":271},[254,1014,299],{"class":271},[254,1016,618],{"class":302},[254,1018,306],{"class":271},[254,1020,309],{"class":271},[254,1022,746],{"class":267},[254,1024,288],{"class":271},[254,1026,299],{"class":271},[254,1028,753],{"class":302},[254,1030,306],{"class":271},[254,1032,309],{"class":271},[254,1034,760],{"class":267},[254,1036,288],{"class":271},[254,1038,1039],{"class":302}," 20",[254,1041,309],{"class":271},[254,1043,1044],{"class":267}," min",[254,1046,288],{"class":271},[254,1048,1049],{"class":302}," 0",[254,1051,309],{"class":271},[254,1053,770],{"class":267},[254,1055,288],{"class":271},[254,1057,775],{"class":302},[254,1059,309],{"class":271},[254,1061,780],{"class":267},[254,1063,288],{"class":271},[254,1065,471],{"class":271},[254,1067,306],{"class":271},[254,1069,1070],{"class":302},"cost",[254,1072,306],{"class":271},[254,1074,794],{"class":271},[254,1076,797],{"class":267},[254,1078,288],{"class":271},[254,1080,291],{"class":271},[254,1082,804],{"class":267},[254,1084,288],{"class":271},[254,1086,299],{"class":271},[254,1088,811],{"class":302},[254,1090,306],{"class":271},[254,1092,309],{"class":271},[254,1094,1095],{"class":267}," user",[254,1097,288],{"class":271},[254,1099,299],{"class":271},[254,1101,811],{"class":302},[254,1103,306],{"class":271},[254,1105,816],{"class":271},[254,1107,1108],{"class":271}," })\n",[254,1110,1111],{"class":256,"line":502},[254,1112,1113],{"class":271},"  }\n",[254,1115,1117],{"class":256,"line":1116},11,[254,1118,449],{"class":271},[133,1120,1121],{},"The system values are what a workspace gets when no plan says otherwise.",[240,1123,1125],{"id":1124},"plans-presets-as-a-layer","Plans: presets as a layer",[133,1127,1128,1129,1132,1133,1135],{},"Free, Pro and Team hold the same four limits. Because the set is a ",[150,1130,1131],{},"layer"," of\nLimits at ",[150,1134,234],{},", a workspace's plan sits between the system values and\nthe workspace's own:",[245,1137,1139],{"className":247,"code":1138,"language":249,"meta":250,"style":250},"export const plans = definePresets({\n  id: 'plans',\n  title: 'Plans',\n  singular: 'Plan',\n  place: { label: 'Admin › Plans', href: '\u002Fadmin\u002Fplans' },\n  slots: ['plan'],\n  layer: { group: 'limits', scope: 'workspace' },\n  fields: { \u002F* the four limits *\u002F },\n  seed: [\n    { key: 'free', slot: 'plan', label: 'Free', values: { maxProjects: 3, maxTasksPerProject: 200, attachmentMb: 10, aiSuggestionsPerDay: 5 } },\n    { key: 'pro', slot: 'plan', label: 'Pro', values: { maxProjects: 50, maxTasksPerProject: 5000, attachmentMb: 100, aiSuggestionsPerDay: 100 } },\n    { key: 'team', slot: 'plan', label: 'Team', values: { maxProjects: 500, maxTasksPerProject: 20000, attachmentMb: 500, aiSuggestionsPerDay: 500 } }\n  ]\n})\n",[150,1140,1141,1157,1172,1186,1202,1236,1254,1289,1303,1313,1404,1489,1574,1580],{"__ignoreMap":250},[254,1142,1143,1145,1147,1150,1152,1155],{"class":256,"line":257},[254,1144,261],{"class":260},[254,1146,264],{"class":260},[254,1148,1149],{"class":267}," plans ",[254,1151,272],{"class":271},[254,1153,1154],{"class":275}," definePresets",[254,1156,279],{"class":271},[254,1158,1159,1161,1163,1165,1168,1170],{"class":256,"line":282},[254,1160,645],{"class":267},[254,1162,288],{"class":271},[254,1164,299],{"class":271},[254,1166,1167],{"class":302},"plans",[254,1169,306],{"class":271},[254,1171,656],{"class":271},[254,1173,1174,1176,1178,1180,1182,1184],{"class":256,"line":327},[254,1175,661],{"class":267},[254,1177,288],{"class":271},[254,1179,299],{"class":271},[254,1181,210],{"class":302},[254,1183,306],{"class":271},[254,1185,656],{"class":271},[254,1187,1188,1191,1193,1195,1198,1200],{"class":256,"line":363},[254,1189,1190],{"class":267},"  singular",[254,1192,288],{"class":271},[254,1194,299],{"class":271},[254,1196,1197],{"class":302},"Plan",[254,1199,306],{"class":271},[254,1201,656],{"class":271},[254,1203,1204,1206,1208,1210,1212,1214,1216,1219,1221,1223,1225,1227,1229,1232,1234],{"class":256,"line":399},[254,1205,676],{"class":267},[254,1207,288],{"class":271},[254,1209,291],{"class":271},[254,1211,294],{"class":267},[254,1213,288],{"class":271},[254,1215,299],{"class":271},[254,1217,1218],{"class":302},"Admin › Plans",[254,1220,306],{"class":271},[254,1222,309],{"class":271},[254,1224,696],{"class":267},[254,1226,288],{"class":271},[254,1228,299],{"class":271},[254,1230,1231],{"class":302},"\u002Fadmin\u002Fplans",[254,1233,306],{"class":271},[254,1235,324],{"class":271},[254,1237,1238,1241,1243,1245,1247,1249,1251],{"class":256,"line":446},[254,1239,1240],{"class":267},"  slots",[254,1242,288],{"class":271},[254,1244,471],{"class":271},[254,1246,306],{"class":271},[254,1248,216],{"class":302},[254,1250,306],{"class":271},[254,1252,1253],{"class":271},"],\n",[254,1255,1256,1259,1261,1263,1266,1268,1270,1272,1274,1276,1279,1281,1283,1285,1287],{"class":256,"line":452},[254,1257,1258],{"class":267},"  layer",[254,1260,288],{"class":271},[254,1262,291],{"class":271},[254,1264,1265],{"class":267}," group",[254,1267,288],{"class":271},[254,1269,299],{"class":271},[254,1271,612],{"class":302},[254,1273,306],{"class":271},[254,1275,309],{"class":271},[254,1277,1278],{"class":267}," scope",[254,1280,288],{"class":271},[254,1282,299],{"class":271},[254,1284,234],{"class":302},[254,1286,306],{"class":271},[254,1288,324],{"class":271},[254,1290,1291,1293,1295,1297,1301],{"class":256,"line":459},[254,1292,712],{"class":267},[254,1294,288],{"class":271},[254,1296,291],{"class":271},[254,1298,1300],{"class":1299},"sKllz"," \u002F* the four limits *\u002F",[254,1302,324],{"class":271},[254,1304,1305,1308,1310],{"class":256,"line":497},[254,1306,1307],{"class":267},"  seed",[254,1309,288],{"class":271},[254,1311,1312],{"class":271}," [\n",[254,1314,1315,1318,1321,1323,1325,1328,1330,1332,1335,1337,1339,1341,1343,1345,1347,1349,1351,1354,1356,1358,1361,1363,1365,1368,1370,1372,1374,1377,1379,1381,1383,1386,1388,1390,1392,1395,1397,1400,1402],{"class":256,"line":502},[254,1316,1317],{"class":271},"    {",[254,1319,1320],{"class":267}," key",[254,1322,288],{"class":271},[254,1324,299],{"class":271},[254,1326,1327],{"class":302},"free",[254,1329,306],{"class":271},[254,1331,309],{"class":271},[254,1333,1334],{"class":267}," slot",[254,1336,288],{"class":271},[254,1338,299],{"class":271},[254,1340,216],{"class":302},[254,1342,306],{"class":271},[254,1344,309],{"class":271},[254,1346,294],{"class":267},[254,1348,288],{"class":271},[254,1350,299],{"class":271},[254,1352,1353],{"class":302},"Free",[254,1355,306],{"class":271},[254,1357,309],{"class":271},[254,1359,1360],{"class":267}," values",[254,1362,288],{"class":271},[254,1364,291],{"class":271},[254,1366,1367],{"class":267}," maxProjects",[254,1369,288],{"class":271},[254,1371,765],{"class":302},[254,1373,309],{"class":271},[254,1375,1376],{"class":267}," maxTasksPerProject",[254,1378,288],{"class":271},[254,1380,862],{"class":302},[254,1382,309],{"class":271},[254,1384,1385],{"class":267}," attachmentMb",[254,1387,288],{"class":271},[254,1389,951],{"class":302},[254,1391,309],{"class":271},[254,1393,1394],{"class":267}," aiSuggestionsPerDay",[254,1396,288],{"class":271},[254,1398,1399],{"class":302}," 5",[254,1401,816],{"class":271},[254,1403,324],{"class":271},[254,1405,1406,1408,1410,1412,1414,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1442,1444,1446,1448,1450,1452,1454,1456,1459,1461,1463,1465,1468,1470,1472,1474,1477,1479,1481,1483,1485,1487],{"class":256,"line":1116},[254,1407,1317],{"class":271},[254,1409,1320],{"class":267},[254,1411,288],{"class":271},[254,1413,299],{"class":271},[254,1415,1416],{"class":302},"pro",[254,1418,306],{"class":271},[254,1420,309],{"class":271},[254,1422,1334],{"class":267},[254,1424,288],{"class":271},[254,1426,299],{"class":271},[254,1428,216],{"class":302},[254,1430,306],{"class":271},[254,1432,309],{"class":271},[254,1434,294],{"class":267},[254,1436,288],{"class":271},[254,1438,299],{"class":271},[254,1440,1441],{"class":302},"Pro",[254,1443,306],{"class":271},[254,1445,309],{"class":271},[254,1447,1360],{"class":267},[254,1449,288],{"class":271},[254,1451,291],{"class":271},[254,1453,1367],{"class":267},[254,1455,288],{"class":271},[254,1457,1458],{"class":302}," 50",[254,1460,309],{"class":271},[254,1462,1376],{"class":267},[254,1464,288],{"class":271},[254,1466,1467],{"class":302}," 5000",[254,1469,309],{"class":271},[254,1471,1385],{"class":267},[254,1473,288],{"class":271},[254,1475,1476],{"class":302}," 100",[254,1478,309],{"class":271},[254,1480,1394],{"class":267},[254,1482,288],{"class":271},[254,1484,1476],{"class":302},[254,1486,816],{"class":271},[254,1488,324],{"class":271},[254,1490,1492,1494,1496,1498,1500,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1528,1530,1532,1534,1536,1538,1540,1542,1545,1547,1549,1551,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572],{"class":256,"line":1491},12,[254,1493,1317],{"class":271},[254,1495,1320],{"class":267},[254,1497,288],{"class":271},[254,1499,299],{"class":271},[254,1501,1502],{"class":302},"team",[254,1504,306],{"class":271},[254,1506,309],{"class":271},[254,1508,1334],{"class":267},[254,1510,288],{"class":271},[254,1512,299],{"class":271},[254,1514,216],{"class":302},[254,1516,306],{"class":271},[254,1518,309],{"class":271},[254,1520,294],{"class":267},[254,1522,288],{"class":271},[254,1524,299],{"class":271},[254,1526,1527],{"class":302},"Team",[254,1529,306],{"class":271},[254,1531,309],{"class":271},[254,1533,1360],{"class":267},[254,1535,288],{"class":271},[254,1537,291],{"class":271},[254,1539,1367],{"class":267},[254,1541,288],{"class":271},[254,1543,1544],{"class":302}," 500",[254,1546,309],{"class":271},[254,1548,1376],{"class":267},[254,1550,288],{"class":271},[254,1552,1553],{"class":302}," 20000",[254,1555,309],{"class":271},[254,1557,1385],{"class":267},[254,1559,288],{"class":271},[254,1561,1544],{"class":302},[254,1563,309],{"class":271},[254,1565,1394],{"class":267},[254,1567,288],{"class":271},[254,1569,1544],{"class":302},[254,1571,816],{"class":271},[254,1573,443],{"class":271},[254,1575,1577],{"class":256,"line":1576},13,[254,1578,1579],{"class":271},"  ]\n",[254,1581,1583],{"class":256,"line":1582},14,[254,1584,449],{"class":271},[133,1586,1587],{},"Free is the first seeded, so it is the slot's default: a workspace assigned no\nplan is on Free. Acme is assigned Pro:",[245,1589,1591],{"className":247,"code":1590,"language":249,"meta":250,"style":250},"await tunables.presets('plans').assign('acme', 'plan', 'pro', { actor: 'Sam' })\n",[150,1592,1593],{"__ignoreMap":250},[254,1594,1595,1598,1602,1606,1609,1612,1614,1616,1618,1620,1622,1625,1627,1629,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652,1654,1657,1659,1661,1664,1666],{"class":256,"line":257},[254,1596,1597],{"class":260},"await",[254,1599,1601],{"class":1600},"sq0K3"," tunables",[254,1603,1605],{"class":1604},"sBd0f",".",[254,1607,1608],{"class":275},"presets",[254,1610,1611],{"class":271},"(",[254,1613,306],{"class":271},[254,1615,1167],{"class":302},[254,1617,306],{"class":271},[254,1619,535],{"class":271},[254,1621,1605],{"class":1604},[254,1623,1624],{"class":275},"assign",[254,1626,1611],{"class":271},[254,1628,306],{"class":271},[254,1630,1631],{"class":302},"acme",[254,1633,306],{"class":271},[254,1635,309],{"class":271},[254,1637,299],{"class":271},[254,1639,216],{"class":302},[254,1641,306],{"class":271},[254,1643,309],{"class":271},[254,1645,299],{"class":271},[254,1647,1416],{"class":302},[254,1649,306],{"class":271},[254,1651,309],{"class":271},[254,1653,291],{"class":271},[254,1655,1656],{"class":267}," actor",[254,1658,288],{"class":271},[254,1660,299],{"class":271},[254,1662,1663],{"class":302},"Sam",[254,1665,306],{"class":271},[254,1667,1108],{"class":271},[133,1669,1670,1671],{},"Editing a plan, or moving a workspace to another one, is refused while it\nwould leave a workspace's own lower limit above the new value:\n",[595,1672,1673],{},"\"Plan \"Pro\": Acme keeps Projects at 20, above 10.\"",[240,1675,202],{"id":234},[133,1677,1678],{},"How a workspace works for everyone in it. The owner sets most of these for\nthe workspace; each person may set their own view and week; only a person\nsets their reminder time; only staff choose the model.",[245,1680,1682],{"className":247,"code":1681,"language":249,"meta":250,"style":250},"export const workspace = defineGroup({\n  id: 'workspace',\n  title: 'Workspace',\n  place: { label: 'Workspace settings', href: '\u002Fworkspace' },\n  fields: {\n    defaultView: choice({ label: 'Default view', options: [\u002F* list, board, calendar *\u002F], default: 'list', override: ['workspace', 'user'] }),\n    weekStartsOn: number({ label: 'Week starts on', unit: 'weekday', default: 1, override: ['workspace', 'user'] }),\n    dueSoonDays: number({ label: 'Due soon', unit: 'days', default: 2, max: 30, override: ['workspace', 'user'] }),\n    reminderHour: number({ label: 'Reminder time', unit: 'hour', default: 9, override: ['user'] }),\n    archiveAfterDays: number({ label: 'Archive done tasks after', unit: 'days', default: 30, max: 365, override: ['workspace'] }),\n    guestAccess: toggle({ label: 'Guests', default: false, override: ['workspace'] }),\n    suggestionModel: pick({ label: 'Suggestion model', catalog: 'models', default: 'small' })\n  },\n  rules: values => values.dueSoonDays > values.archiveAfterDays\n    ? [{ key: 'dueSoonDays', message: 'Due soon may not be longer than the time before done tasks are archived.' }]\n    : [],\n  confirm: (next, previous) => next.guestAccess && !previous.guestAccess\n    ? 'Guests will see every task in the project they are invited to, including its comments and attachments.'\n    : undefined\n})\n",[150,1683,1684,1699,1713,1727,1761,1769,1843,1913,1992,2054,2123,2173,2225,2230,2260,2297,2306,2350,2363,2371],{"__ignoreMap":250},[254,1685,1686,1688,1690,1693,1695,1697],{"class":256,"line":257},[254,1687,261],{"class":260},[254,1689,264],{"class":260},[254,1691,1692],{"class":267}," workspace ",[254,1694,272],{"class":271},[254,1696,638],{"class":275},[254,1698,279],{"class":271},[254,1700,1701,1703,1705,1707,1709,1711],{"class":256,"line":282},[254,1702,645],{"class":267},[254,1704,288],{"class":271},[254,1706,299],{"class":271},[254,1708,234],{"class":302},[254,1710,306],{"class":271},[254,1712,656],{"class":271},[254,1714,1715,1717,1719,1721,1723,1725],{"class":256,"line":327},[254,1716,661],{"class":267},[254,1718,288],{"class":271},[254,1720,299],{"class":271},[254,1722,202],{"class":302},[254,1724,306],{"class":271},[254,1726,656],{"class":271},[254,1728,1729,1731,1733,1735,1737,1739,1741,1744,1746,1748,1750,1752,1754,1757,1759],{"class":256,"line":363},[254,1730,676],{"class":267},[254,1732,288],{"class":271},[254,1734,291],{"class":271},[254,1736,294],{"class":267},[254,1738,288],{"class":271},[254,1740,299],{"class":271},[254,1742,1743],{"class":302},"Workspace settings",[254,1745,306],{"class":271},[254,1747,309],{"class":271},[254,1749,696],{"class":267},[254,1751,288],{"class":271},[254,1753,299],{"class":271},[254,1755,1756],{"class":302},"\u002Fworkspace",[254,1758,306],{"class":271},[254,1760,324],{"class":271},[254,1762,1763,1765,1767],{"class":256,"line":399},[254,1764,712],{"class":267},[254,1766,288],{"class":271},[254,1768,717],{"class":271},[254,1770,1771,1774,1776,1779,1781,1783,1785,1787,1790,1792,1794,1797,1799,1801,1804,1806,1808,1810,1812,1815,1817,1819,1821,1823,1825,1827,1829,1831,1833,1835,1837,1839,1841],{"class":256,"line":446},[254,1772,1773],{"class":267},"    defaultView",[254,1775,288],{"class":271},[254,1777,1778],{"class":275}," choice",[254,1780,730],{"class":271},[254,1782,294],{"class":267},[254,1784,288],{"class":271},[254,1786,299],{"class":271},[254,1788,1789],{"class":302},"Default view",[254,1791,306],{"class":271},[254,1793,309],{"class":271},[254,1795,1796],{"class":267}," options",[254,1798,288],{"class":271},[254,1800,471],{"class":271},[254,1802,1803],{"class":1299},"\u002F* list, board, calendar *\u002F",[254,1805,794],{"class":271},[254,1807,760],{"class":267},[254,1809,288],{"class":271},[254,1811,299],{"class":271},[254,1813,1814],{"class":302},"list",[254,1816,306],{"class":271},[254,1818,309],{"class":271},[254,1820,797],{"class":267},[254,1822,288],{"class":271},[254,1824,471],{"class":271},[254,1826,306],{"class":271},[254,1828,234],{"class":302},[254,1830,306],{"class":271},[254,1832,309],{"class":271},[254,1834,299],{"class":271},[254,1836,238],{"class":302},[254,1838,306],{"class":271},[254,1840,488],{"class":271},[254,1842,819],{"class":271},[254,1844,1845,1848,1850,1852,1854,1856,1858,1860,1863,1865,1867,1869,1871,1873,1876,1878,1880,1882,1884,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911],{"class":256,"line":452},[254,1846,1847],{"class":267},"    weekStartsOn",[254,1849,288],{"class":271},[254,1851,727],{"class":275},[254,1853,730],{"class":271},[254,1855,294],{"class":267},[254,1857,288],{"class":271},[254,1859,299],{"class":271},[254,1861,1862],{"class":302},"Week starts on",[254,1864,306],{"class":271},[254,1866,309],{"class":271},[254,1868,746],{"class":267},[254,1870,288],{"class":271},[254,1872,299],{"class":271},[254,1874,1875],{"class":302},"weekday",[254,1877,306],{"class":271},[254,1879,309],{"class":271},[254,1881,760],{"class":267},[254,1883,288],{"class":271},[254,1885,1886],{"class":302}," 1",[254,1888,309],{"class":271},[254,1890,797],{"class":267},[254,1892,288],{"class":271},[254,1894,471],{"class":271},[254,1896,306],{"class":271},[254,1898,234],{"class":302},[254,1900,306],{"class":271},[254,1902,309],{"class":271},[254,1904,299],{"class":271},[254,1906,238],{"class":302},[254,1908,306],{"class":271},[254,1910,488],{"class":271},[254,1912,819],{"class":271},[254,1914,1915,1918,1920,1922,1924,1926,1928,1930,1933,1935,1937,1939,1941,1943,1946,1948,1950,1952,1954,1957,1959,1961,1963,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990],{"class":256,"line":459},[254,1916,1917],{"class":267},"    dueSoonDays",[254,1919,288],{"class":271},[254,1921,727],{"class":275},[254,1923,730],{"class":271},[254,1925,294],{"class":267},[254,1927,288],{"class":271},[254,1929,299],{"class":271},[254,1931,1932],{"class":302},"Due soon",[254,1934,306],{"class":271},[254,1936,309],{"class":271},[254,1938,746],{"class":267},[254,1940,288],{"class":271},[254,1942,299],{"class":271},[254,1944,1945],{"class":302},"days",[254,1947,306],{"class":271},[254,1949,309],{"class":271},[254,1951,760],{"class":267},[254,1953,288],{"class":271},[254,1955,1956],{"class":302}," 2",[254,1958,309],{"class":271},[254,1960,770],{"class":267},[254,1962,288],{"class":271},[254,1964,1965],{"class":302}," 30",[254,1967,309],{"class":271},[254,1969,797],{"class":267},[254,1971,288],{"class":271},[254,1973,471],{"class":271},[254,1975,306],{"class":271},[254,1977,234],{"class":302},[254,1979,306],{"class":271},[254,1981,309],{"class":271},[254,1983,299],{"class":271},[254,1985,238],{"class":302},[254,1987,306],{"class":271},[254,1989,488],{"class":271},[254,1991,819],{"class":271},[254,1993,1994,1997,1999,2001,2003,2005,2007,2009,2012,2014,2016,2018,2020,2022,2025,2027,2029,2031,2033,2036,2038,2040,2042,2044,2046,2048,2050,2052],{"class":256,"line":497},[254,1995,1996],{"class":267},"    reminderHour",[254,1998,288],{"class":271},[254,2000,727],{"class":275},[254,2002,730],{"class":271},[254,2004,294],{"class":267},[254,2006,288],{"class":271},[254,2008,299],{"class":271},[254,2010,2011],{"class":302},"Reminder time",[254,2013,306],{"class":271},[254,2015,309],{"class":271},[254,2017,746],{"class":267},[254,2019,288],{"class":271},[254,2021,299],{"class":271},[254,2023,2024],{"class":302},"hour",[254,2026,306],{"class":271},[254,2028,309],{"class":271},[254,2030,760],{"class":267},[254,2032,288],{"class":271},[254,2034,2035],{"class":302}," 9",[254,2037,309],{"class":271},[254,2039,797],{"class":267},[254,2041,288],{"class":271},[254,2043,471],{"class":271},[254,2045,306],{"class":271},[254,2047,238],{"class":302},[254,2049,306],{"class":271},[254,2051,488],{"class":271},[254,2053,819],{"class":271},[254,2055,2056,2059,2061,2063,2065,2067,2069,2071,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096,2098,2100,2102,2105,2107,2109,2111,2113,2115,2117,2119,2121],{"class":256,"line":502},[254,2057,2058],{"class":267},"    archiveAfterDays",[254,2060,288],{"class":271},[254,2062,727],{"class":275},[254,2064,730],{"class":271},[254,2066,294],{"class":267},[254,2068,288],{"class":271},[254,2070,299],{"class":271},[254,2072,2073],{"class":302},"Archive done tasks after",[254,2075,306],{"class":271},[254,2077,309],{"class":271},[254,2079,746],{"class":267},[254,2081,288],{"class":271},[254,2083,299],{"class":271},[254,2085,1945],{"class":302},[254,2087,306],{"class":271},[254,2089,309],{"class":271},[254,2091,760],{"class":267},[254,2093,288],{"class":271},[254,2095,1965],{"class":302},[254,2097,309],{"class":271},[254,2099,770],{"class":267},[254,2101,288],{"class":271},[254,2103,2104],{"class":302}," 365",[254,2106,309],{"class":271},[254,2108,797],{"class":267},[254,2110,288],{"class":271},[254,2112,471],{"class":271},[254,2114,306],{"class":271},[254,2116,234],{"class":302},[254,2118,306],{"class":271},[254,2120,488],{"class":271},[254,2122,819],{"class":271},[254,2124,2125,2128,2130,2133,2135,2137,2139,2141,2144,2146,2148,2150,2152,2155,2157,2159,2161,2163,2165,2167,2169,2171],{"class":256,"line":1116},[254,2126,2127],{"class":267},"    guestAccess",[254,2129,288],{"class":271},[254,2131,2132],{"class":275}," toggle",[254,2134,730],{"class":271},[254,2136,294],{"class":267},[254,2138,288],{"class":271},[254,2140,299],{"class":271},[254,2142,2143],{"class":302},"Guests",[254,2145,306],{"class":271},[254,2147,309],{"class":271},[254,2149,760],{"class":267},[254,2151,288],{"class":271},[254,2153,2154],{"class":260}," false",[254,2156,309],{"class":271},[254,2158,797],{"class":267},[254,2160,288],{"class":271},[254,2162,471],{"class":271},[254,2164,306],{"class":271},[254,2166,234],{"class":302},[254,2168,306],{"class":271},[254,2170,488],{"class":271},[254,2172,819],{"class":271},[254,2174,2175,2178,2180,2183,2185,2187,2189,2191,2194,2196,2198,2201,2203,2205,2208,2210,2212,2214,2216,2218,2221,2223],{"class":256,"line":1491},[254,2176,2177],{"class":267},"    suggestionModel",[254,2179,288],{"class":271},[254,2181,2182],{"class":275}," pick",[254,2184,730],{"class":271},[254,2186,294],{"class":267},[254,2188,288],{"class":271},[254,2190,299],{"class":271},[254,2192,2193],{"class":302},"Suggestion model",[254,2195,306],{"class":271},[254,2197,309],{"class":271},[254,2199,2200],{"class":267}," catalog",[254,2202,288],{"class":271},[254,2204,299],{"class":271},[254,2206,2207],{"class":302},"models",[254,2209,306],{"class":271},[254,2211,309],{"class":271},[254,2213,760],{"class":267},[254,2215,288],{"class":271},[254,2217,299],{"class":271},[254,2219,2220],{"class":302},"small",[254,2222,306],{"class":271},[254,2224,1108],{"class":271},[254,2226,2227],{"class":256,"line":1576},[254,2228,2229],{"class":271},"  },\n",[254,2231,2232,2235,2237,2240,2243,2245,2247,2250,2253,2255,2257],{"class":256,"line":1582},[254,2233,2234],{"class":275},"  rules",[254,2236,288],{"class":271},[254,2238,2239],{"class":267}," values ",[254,2241,2242],{"class":260},"=>",[254,2244,1360],{"class":267},[254,2246,1605],{"class":271},[254,2248,2249],{"class":267},"dueSoonDays ",[254,2251,2252],{"class":271},">",[254,2254,1360],{"class":267},[254,2256,1605],{"class":271},[254,2258,2259],{"class":267},"archiveAfterDays\n",[254,2261,2263,2266,2269,2271,2273,2275,2278,2280,2282,2285,2287,2289,2292,2294],{"class":256,"line":2262},15,[254,2264,2265],{"class":271},"    ?",[254,2267,2268],{"class":271}," [{",[254,2270,1320],{"class":267},[254,2272,288],{"class":271},[254,2274,299],{"class":271},[254,2276,2277],{"class":302},"dueSoonDays",[254,2279,306],{"class":271},[254,2281,309],{"class":271},[254,2283,2284],{"class":267}," message",[254,2286,288],{"class":271},[254,2288,299],{"class":271},[254,2290,2291],{"class":302},"Due soon may not be longer than the time before done tasks are archived.",[254,2293,306],{"class":271},[254,2295,2296],{"class":271}," }]\n",[254,2298,2300,2303],{"class":256,"line":2299},16,[254,2301,2302],{"class":271},"    :",[254,2304,2305],{"class":271}," [],\n",[254,2307,2309,2312,2314,2316,2319,2321,2324,2326,2328,2331,2333,2336,2339,2342,2345,2347],{"class":256,"line":2308},17,[254,2310,2311],{"class":275},"  confirm",[254,2313,288],{"class":271},[254,2315,515],{"class":271},[254,2317,2318],{"class":267},"next",[254,2320,309],{"class":271},[254,2322,2323],{"class":267}," previous",[254,2325,535],{"class":271},[254,2327,538],{"class":260},[254,2329,2330],{"class":267}," next",[254,2332,1605],{"class":271},[254,2334,2335],{"class":267},"guestAccess ",[254,2337,2338],{"class":271},"&&",[254,2340,2341],{"class":271}," !",[254,2343,2344],{"class":267},"previous",[254,2346,1605],{"class":271},[254,2348,2349],{"class":267},"guestAccess\n",[254,2351,2353,2355,2357,2360],{"class":256,"line":2352},18,[254,2354,2265],{"class":271},[254,2356,299],{"class":271},[254,2358,2359],{"class":302},"Guests will see every task in the project they are invited to, including its comments and attachments.",[254,2361,2362],{"class":271},"'\n",[254,2364,2366,2368],{"class":256,"line":2365},19,[254,2367,2302],{"class":271},[254,2369,2370],{"class":260}," undefined\n",[254,2372,2374],{"class":256,"line":2373},20,[254,2375,449],{"class":271},[2377,2378,2379,2389],"ul",{},[2380,2381,2382,2385,2386,2388],"li",{},[136,2383,2384],{},"The rule"," runs on the values as read where the change is made. If Acme\narchives done tasks after 7 days and Dana sets ",[595,2387,1932],{}," to 10, her save is\nrefused: what she would read no longer holds together.",[2380,2390,2391,2394],{},[136,2392,2393],{},"The confirmation"," asks before Guests is turned on, for the system or for\none workspace, and saves only when the change is sent again confirmed.",[240,2396,2398],{"id":2397},"models-a-catalog","Models: a catalog",[133,2400,2401],{},"The models that may draft task suggestions, each with what one suggestion\ncosts:",[245,2403,2405],{"className":247,"code":2404,"language":249,"meta":250,"style":250},"export const models = defineCatalog({\n  id: 'models',\n  title: 'Models',\n  singular: 'Model',\n  place: { label: 'Admin › Models', href: '\u002Fadmin\u002Fmodels' },\n  idLabel: 'Model id',\n  labelField: 'label',\n  fields: {\n    label: text({ label: 'Label', default: '', optional: false, maxLength: 80 }),\n    centsPerSuggestion: number({ label: 'Cost a suggestion', unit: 'count', default: 1, affects: ['cost'] })\n  },\n  seed: [\n    { id: 'small', values: { label: 'Small and quick', centsPerSuggestion: 1 } },\n    { id: 'large', values: { label: 'Large and careful', centsPerSuggestion: 5 } }\n  ]\n})\n",[150,2406,2407,2423,2437,2451,2466,2500,2516,2532,2540,2593,2653,2657,2665,2711,2757,2761],{"__ignoreMap":250},[254,2408,2409,2411,2413,2416,2418,2421],{"class":256,"line":257},[254,2410,261],{"class":260},[254,2412,264],{"class":260},[254,2414,2415],{"class":267}," models ",[254,2417,272],{"class":271},[254,2419,2420],{"class":275}," defineCatalog",[254,2422,279],{"class":271},[254,2424,2425,2427,2429,2431,2433,2435],{"class":256,"line":282},[254,2426,645],{"class":267},[254,2428,288],{"class":271},[254,2430,299],{"class":271},[254,2432,2207],{"class":302},[254,2434,306],{"class":271},[254,2436,656],{"class":271},[254,2438,2439,2441,2443,2445,2447,2449],{"class":256,"line":327},[254,2440,661],{"class":267},[254,2442,288],{"class":271},[254,2444,299],{"class":271},[254,2446,222],{"class":302},[254,2448,306],{"class":271},[254,2450,656],{"class":271},[254,2452,2453,2455,2457,2459,2462,2464],{"class":256,"line":363},[254,2454,1190],{"class":267},[254,2456,288],{"class":271},[254,2458,299],{"class":271},[254,2460,2461],{"class":302},"Model",[254,2463,306],{"class":271},[254,2465,656],{"class":271},[254,2467,2468,2470,2472,2474,2476,2478,2480,2483,2485,2487,2489,2491,2493,2496,2498],{"class":256,"line":399},[254,2469,676],{"class":267},[254,2471,288],{"class":271},[254,2473,291],{"class":271},[254,2475,294],{"class":267},[254,2477,288],{"class":271},[254,2479,299],{"class":271},[254,2481,2482],{"class":302},"Admin › Models",[254,2484,306],{"class":271},[254,2486,309],{"class":271},[254,2488,696],{"class":267},[254,2490,288],{"class":271},[254,2492,299],{"class":271},[254,2494,2495],{"class":302},"\u002Fadmin\u002Fmodels",[254,2497,306],{"class":271},[254,2499,324],{"class":271},[254,2501,2502,2505,2507,2509,2512,2514],{"class":256,"line":446},[254,2503,2504],{"class":267},"  idLabel",[254,2506,288],{"class":271},[254,2508,299],{"class":271},[254,2510,2511],{"class":302},"Model id",[254,2513,306],{"class":271},[254,2515,656],{"class":271},[254,2517,2518,2521,2523,2525,2528,2530],{"class":256,"line":452},[254,2519,2520],{"class":267},"  labelField",[254,2522,288],{"class":271},[254,2524,299],{"class":271},[254,2526,2527],{"class":302},"label",[254,2529,306],{"class":271},[254,2531,656],{"class":271},[254,2533,2534,2536,2538],{"class":256,"line":459},[254,2535,712],{"class":267},[254,2537,288],{"class":271},[254,2539,717],{"class":271},[254,2541,2542,2545,2547,2550,2552,2554,2556,2558,2561,2563,2565,2567,2569,2572,2574,2577,2579,2581,2583,2586,2588,2591],{"class":256,"line":497},[254,2543,2544],{"class":267},"    label",[254,2546,288],{"class":271},[254,2548,2549],{"class":275}," text",[254,2551,730],{"class":271},[254,2553,294],{"class":267},[254,2555,288],{"class":271},[254,2557,299],{"class":271},[254,2559,2560],{"class":302},"Label",[254,2562,306],{"class":271},[254,2564,309],{"class":271},[254,2566,760],{"class":267},[254,2568,288],{"class":271},[254,2570,2571],{"class":271}," ''",[254,2573,309],{"class":271},[254,2575,2576],{"class":267}," optional",[254,2578,288],{"class":271},[254,2580,2154],{"class":260},[254,2582,309],{"class":271},[254,2584,2585],{"class":267}," maxLength",[254,2587,288],{"class":271},[254,2589,2590],{"class":302}," 80",[254,2592,819],{"class":271},[254,2594,2595,2598,2600,2602,2604,2606,2608,2610,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639,2641,2643,2645,2647,2649,2651],{"class":256,"line":502},[254,2596,2597],{"class":267},"    centsPerSuggestion",[254,2599,288],{"class":271},[254,2601,727],{"class":275},[254,2603,730],{"class":271},[254,2605,294],{"class":267},[254,2607,288],{"class":271},[254,2609,299],{"class":271},[254,2611,2612],{"class":302},"Cost a suggestion",[254,2614,306],{"class":271},[254,2616,309],{"class":271},[254,2618,746],{"class":267},[254,2620,288],{"class":271},[254,2622,299],{"class":271},[254,2624,753],{"class":302},[254,2626,306],{"class":271},[254,2628,309],{"class":271},[254,2630,760],{"class":267},[254,2632,288],{"class":271},[254,2634,1886],{"class":302},[254,2636,309],{"class":271},[254,2638,780],{"class":267},[254,2640,288],{"class":271},[254,2642,471],{"class":271},[254,2644,306],{"class":271},[254,2646,1070],{"class":302},[254,2648,306],{"class":271},[254,2650,488],{"class":271},[254,2652,1108],{"class":271},[254,2654,2655],{"class":256,"line":1116},[254,2656,2229],{"class":271},[254,2658,2659,2661,2663],{"class":256,"line":1491},[254,2660,1307],{"class":267},[254,2662,288],{"class":271},[254,2664,1312],{"class":271},[254,2666,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2696,2698,2700,2703,2705,2707,2709],{"class":256,"line":1576},[254,2668,1317],{"class":271},[254,2670,528],{"class":267},[254,2672,288],{"class":271},[254,2674,299],{"class":271},[254,2676,2220],{"class":302},[254,2678,306],{"class":271},[254,2680,309],{"class":271},[254,2682,1360],{"class":267},[254,2684,288],{"class":271},[254,2686,291],{"class":271},[254,2688,294],{"class":267},[254,2690,288],{"class":271},[254,2692,299],{"class":271},[254,2694,2695],{"class":302},"Small and quick",[254,2697,306],{"class":271},[254,2699,309],{"class":271},[254,2701,2702],{"class":267}," centsPerSuggestion",[254,2704,288],{"class":271},[254,2706,1886],{"class":302},[254,2708,816],{"class":271},[254,2710,324],{"class":271},[254,2712,2713,2715,2717,2719,2721,2724,2726,2728,2730,2732,2734,2736,2738,2740,2743,2745,2747,2749,2751,2753,2755],{"class":256,"line":1582},[254,2714,1317],{"class":271},[254,2716,528],{"class":267},[254,2718,288],{"class":271},[254,2720,299],{"class":271},[254,2722,2723],{"class":302},"large",[254,2725,306],{"class":271},[254,2727,309],{"class":271},[254,2729,1360],{"class":267},[254,2731,288],{"class":271},[254,2733,291],{"class":271},[254,2735,294],{"class":267},[254,2737,288],{"class":271},[254,2739,299],{"class":271},[254,2741,2742],{"class":302},"Large and careful",[254,2744,306],{"class":271},[254,2746,309],{"class":271},[254,2748,2702],{"class":267},[254,2750,288],{"class":271},[254,2752,1399],{"class":302},[254,2754,816],{"class":271},[254,2756,443],{"class":271},[254,2758,2759],{"class":256,"line":2262},[254,2760,1579],{"class":271},[254,2762,2763],{"class":256,"line":2299},[254,2764,449],{"class":271},[133,2766,2767,2769,2770],{},[595,2768,2193],{}," picks from it, so the model the system uses cannot be\nretired: ",[595,2771,2772],{},"\"Small and quick is in use by Workspace › Suggestion model; move\nthem to another model first.\"",[240,2774,2776],{"id":2775},"reading-in-the-app","Reading in the app",[133,2778,2779],{},"Tasklane's own routes read the values for the person asking, at their scope:",[245,2781,2783],{"className":247,"code":2782,"language":249,"meta":250,"style":250},"const scope = { workspace: person.workspace, user: person.id }\nconst { maxProjects } = await tunables.get('limits', { scope })\nconst { weekStartsOn, defaultView } = await tunables.get('workspace', { scope })\n",[150,2784,2785,2824,2863],{"__ignoreMap":250},[254,2786,2787,2790,2793,2795,2797,2799,2801,2804,2806,2808,2810,2812,2814,2816,2818,2821],{"class":256,"line":257},[254,2788,2789],{"class":260},"const",[254,2791,2792],{"class":267}," scope ",[254,2794,272],{"class":271},[254,2796,291],{"class":271},[254,2798,804],{"class":267},[254,2800,288],{"class":271},[254,2802,2803],{"class":267}," person",[254,2805,1605],{"class":271},[254,2807,234],{"class":267},[254,2809,309],{"class":271},[254,2811,1095],{"class":267},[254,2813,288],{"class":271},[254,2815,2803],{"class":267},[254,2817,1605],{"class":271},[254,2819,2820],{"class":267},"id ",[254,2822,2823],{"class":271},"}\n",[254,2825,2826,2828,2830,2833,2835,2837,2840,2842,2844,2847,2849,2851,2853,2855,2857,2859,2861],{"class":256,"line":282},[254,2827,2789],{"class":260},[254,2829,291],{"class":271},[254,2831,2832],{"class":267}," maxProjects ",[254,2834,552],{"class":271},[254,2836,512],{"class":271},[254,2838,2839],{"class":260}," await",[254,2841,1601],{"class":1600},[254,2843,1605],{"class":1604},[254,2845,2846],{"class":275},"get",[254,2848,1611],{"class":271},[254,2850,306],{"class":271},[254,2852,612],{"class":302},[254,2854,306],{"class":271},[254,2856,309],{"class":271},[254,2858,291],{"class":271},[254,2860,2792],{"class":267},[254,2862,449],{"class":271},[254,2864,2865,2867,2869,2872,2874,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901,2903],{"class":256,"line":327},[254,2866,2789],{"class":260},[254,2868,291],{"class":271},[254,2870,2871],{"class":267}," weekStartsOn",[254,2873,309],{"class":271},[254,2875,2876],{"class":267}," defaultView ",[254,2878,552],{"class":271},[254,2880,512],{"class":271},[254,2882,2839],{"class":260},[254,2884,1601],{"class":1600},[254,2886,1605],{"class":1604},[254,2888,2846],{"class":275},[254,2890,1611],{"class":271},[254,2892,306],{"class":271},[254,2894,234],{"class":302},[254,2896,306],{"class":271},[254,2898,309],{"class":271},[254,2900,291],{"class":271},[254,2902,2792],{"class":267},[254,2904,449],{"class":271},[133,2906,2907,2908,2910,2911,2914],{},"For Dana, in Acme on Pro, ",[595,2909,739],{}," reads 50 until Acme lowers it, and ",[595,2912,2913],{},"Week\nstarts on"," reads Monday until Acme or Dana sets another day.",[240,2916,2918],{"id":2917},"the-playground","The playground",[133,2920,2921,2922,2925],{},"The repository's ",[150,2923,2924],{},"playground\u002F"," is Tasklane as a Nuxt app. It nests tunables in\nits own oRPC router, puts the layer's components on Tasklane's pages, and\nstarts with Acme on Pro and Hobby club on the default plan. A switcher in the\nheader signs in as one of three people:",[171,2927,2928,2938],{},[174,2929,2930],{},[177,2931,2932,2935],{},[180,2933,2934],{},"Who",[180,2936,2937],{},"Sees",[187,2939,2940,2966,2979],{},[177,2941,2942,2945],{},[192,2943,2944],{},"Sam, Tasklane staff",[192,2946,2947,2949,2950,2953,2954,2949,2956,2959,2960,2949,2962,2965],{},[150,2948,703],{},", ",[150,2951,2952],{},"\u002Fadmin\u002Fdefaults"," (Workspace for the system), ",[150,2955,1231],{},[150,2957,2958],{},"\u002Fadmin\u002Fworkspaces"," (each workspace's plan), ",[150,2961,2495],{},[150,2963,2964],{},"\u002Fadmin\u002Fsettings"," (All settings)",[177,2967,2968,2971],{},[192,2969,2970],{},"Olivia, owns Acme",[192,2972,2973,2975,2976],{},[150,2974,1756],{},": Workspace and Limits at ",[150,2977,2978],{},"{ workspace: 'acme' }",[177,2980,2981,2984],{},[192,2982,2983],{},"Dana, member of Acme",[192,2985,2986,2989,2990],{},[150,2987,2988],{},"\u002Fme",": her own Workspace preferences and AI suggestions at ",[150,2991,2992],{},"{ workspace: 'acme', user: 'dana' }",[133,2994,2995,2996,2999,3000,3003],{},"Its ",[150,2997,2998],{},"authorize"," lets Sam do anything, and each of the others only their own\nscope; see ",[144,3001,61],{"href":3002},".\u002Faccess",". From a checkout:",[245,3005,3009],{"className":3006,"code":3007,"language":3008,"meta":250,"style":250},"language-bash shiki shiki-themes tunables-panel-light tunables-panel-light tunables-panel-dark","pnpm install\npnpm --dir playground dev\n","bash",[150,3010,3011,3019],{"__ignoreMap":250},[254,3012,3013,3016],{"class":256,"line":257},[254,3014,3015],{"class":275},"pnpm",[254,3017,3018],{"class":302}," install\n",[254,3020,3021,3023,3026,3029],{"class":256,"line":282},[254,3022,3015],{"class":275},[254,3024,3025],{"class":302}," --dir",[254,3027,3028],{"class":302}," playground",[254,3030,3031],{"class":302}," dev\n",[133,3033,3034,3035,3038],{},"It runs in memory, or on Postgres when ",[150,3036,3037],{},"DATABASE_URL"," is set.",[240,3040,3042],{"id":3041},"the-server-examples","The server examples",[133,3044,3045],{},"The same app on two other servers, each with a route of its own that reads\nthe values for the person asking:",[2377,3047,3048,3073],{},[2380,3049,3050,3057,3058,3061,3062,3065,3066,3068,3069,3072],{},[144,3051,3054],{"href":3052,"rel":3053},"https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Ftunables\u002Ftree\u002Fmain\u002Fexamples\u002Fexpress",[148],[150,3055,3056],{},"examples\u002Fexpress","\nmounts ",[150,3059,3060],{},"tunablesMiddleware","; its ",[150,3063,3064],{},"POST \u002Fprojects"," refuses a project past\nthe person's ",[595,3067,739],{}," limit. Run ",[150,3070,3071],{},"npx jiti examples\u002Fexpress\u002Fserver.ts","\n(port 3300).",[2380,3074,3075,3057,3082,3061,3085,3088,3089,3092],{},[144,3076,3079],{"href":3077,"rel":3078},"https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Ftunables\u002Ftree\u002Fmain\u002Fexamples\u002Fhono",[148],[150,3080,3081],{},"examples\u002Fhono",[150,3083,3084],{},"createHandler",[150,3086,3087],{},"GET \u002Fme\u002Fcalendar"," answers the person's own\nweek and view. Run ",[150,3090,3091],{},"npx jiti examples\u002Fhono\u002Fserver.ts"," (port 3301).",[133,3094,3095,3096,3099,3100,2949,3103,3106,3107,3110],{},"Send an ",[150,3097,3098],{},"x-person"," header of ",[150,3101,3102],{},"sam",[150,3104,3105],{},"olivia"," or ",[150,3108,3109],{},"dana"," in place of a session.",[240,3112,3114],{"id":3113},"from-the-terminal","From the terminal",[133,3116,3117,3119,3120,3122],{},[150,3118,168],{}," gives the CLI Tasklane's tunables, on\nPostgres when ",[150,3121,3037],{}," is set:",[245,3124,3126],{"className":3006,"code":3125,"language":3008,"meta":250,"style":250},"npx tunables --cwd examples\u002Ftasklane sync\nnpx tunables --cwd examples\u002Ftasklane get limits --scope workspace=acme\nnpx tunables --cwd examples\u002Ftasklane set workspace reminderHour=7 --scope workspace=acme,user=dana --reason \"Dana starts early\"\n",[150,3127,3128,3144,3166],{"__ignoreMap":250},[254,3129,3130,3133,3135,3138,3141],{"class":256,"line":257},[254,3131,3132],{"class":275},"npx",[254,3134,1601],{"class":302},[254,3136,3137],{"class":302}," --cwd",[254,3139,3140],{"class":302}," examples\u002Ftasklane",[254,3142,3143],{"class":302}," sync\n",[254,3145,3146,3148,3150,3152,3154,3157,3160,3163],{"class":256,"line":282},[254,3147,3132],{"class":275},[254,3149,1601],{"class":302},[254,3151,3137],{"class":302},[254,3153,3140],{"class":302},[254,3155,3156],{"class":302}," get",[254,3158,3159],{"class":302}," limits",[254,3161,3162],{"class":302}," --scope",[254,3164,3165],{"class":302}," workspace=acme\n",[254,3167,3168,3170,3172,3174,3176,3179,3181,3184,3186,3189,3192,3195,3198],{"class":256,"line":327},[254,3169,3132],{"class":275},[254,3171,1601],{"class":302},[254,3173,3137],{"class":302},[254,3175,3140],{"class":302},[254,3177,3178],{"class":302}," set",[254,3180,804],{"class":302},[254,3182,3183],{"class":302}," reminderHour=7",[254,3185,3162],{"class":302},[254,3187,3188],{"class":302}," workspace=acme,user=dana",[254,3190,3191],{"class":302}," --reason",[254,3193,3194],{"class":271}," \"",[254,3196,3197],{"class":302},"Dana starts early",[254,3199,3200],{"class":271},"\"\n",[3202,3203,3204],"style",{},"html pre.shiki code .sZ4mS, html code.shiki .sZ4mS{--shiki-light:#115E59;--shiki-default:#115E59;--shiki-dark:#5EEAD4}html pre.shiki code .sVz71, html code.shiki .sVz71{--shiki-light:#182025;--shiki-default:#182025;--shiki-dark:#E6EBEC}html pre.shiki code .sp9ci, html code.shiki .sp9ci{--shiki-light:#4F5D63;--shiki-default:#4F5D63;--shiki-dark:#A3AFB4}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 .sjCzm, html code.shiki .sjCzm{--shiki-light:#92400E;--shiki-default:#92400E;--shiki-dark:#FCD34D}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}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}",{"title":250,"searchDepth":282,"depth":282,"links":3206},[3207,3208,3209,3210,3211,3212,3213,3214,3215],{"id":242,"depth":282,"text":243},{"id":612,"depth":282,"text":194},{"id":1124,"depth":282,"text":1125},{"id":234,"depth":282,"text":202},{"id":2397,"depth":282,"text":2398},{"id":2775,"depth":282,"text":2776},{"id":2917,"depth":282,"text":2918},{"id":3041,"depth":282,"text":3042},{"id":3113,"depth":282,"text":3114},"md",{},28,{"title":121,"description":122},"docs\u002Ftasklane-example","jt_tUrxt009C2decF14mbh0o3HhdLRtp4_MXZsJKsdA",1792845119797]