[{"data":1,"prerenderedAt":542},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fvalue-facts":135,"\u002Fdocs\u002Fvalue-facts-surround":538},[4],{"title":5,"path":6,"stem":7,"children":8,"page":134},"Docs","\u002Fdocs","docs",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130],{"title":10,"path":11,"stem":12},"AI harnesses: LLM tools, MCP servers and agents","\u002Fdocs\u002Fai-tools","docs\u002Fai-tools",{"title":14,"path":15,"stem":16},"Architecture","\u002Fdocs\u002Farchitecture","docs\u002Farchitecture",{"title":18,"path":19,"stem":20},"Web \u002F native bridges","\u002Fdocs\u002Fbridges","docs\u002Fbridges",{"title":22,"path":23,"stem":24},"Broadcast channels and tests","\u002Fdocs\u002Fchannels-and-tests","docs\u002Fchannels-and-tests",{"title":26,"path":27,"stem":28},"CLI reference","\u002Fdocs\u002Fcli","docs\u002Fcli",{"title":30,"path":31,"stem":32},"Completeness: how far an answer reaches","\u002Fdocs\u002Fcompleteness","docs\u002Fcompleteness",{"title":34,"path":35,"stem":36},"Configuration","\u002Fdocs\u002Fconfiguration","docs\u002Fconfiguration",{"title":38,"path":39,"stem":40},"External systems","\u002Fdocs\u002Fexternal","docs\u002Fexternal",{"title":42,"path":43,"stem":44},"Generated, copied and vendored files","\u002Fdocs\u002Fgenerated","docs\u002Fgenerated",{"title":46,"path":47,"stem":48},"Installing and updating cg","\u002Fdocs\u002Finstall","docs\u002Finstall",{"title":50,"path":51,"stem":52},"Java","\u002Fdocs\u002Fjava","docs\u002Fjava",{"title":54,"path":55,"stem":56},"Kotlin","\u002Fdocs\u002Fkotlin","docs\u002Fkotlin",{"title":58,"path":59,"stem":60},"Known limitations","\u002Fdocs\u002Flimitations","docs\u002Flimitations",{"title":62,"path":63,"stem":64,"children":65},"MCP server","\u002Fdocs\u002Fmcp","docs\u002Fmcp",[66],{"title":67,"path":68,"stem":69},"code-graph MCP: sample outputs (real calls via the MCP Python SDK stdio client)","\u002Fdocs\u002Fmcp\u002Fsample_outputs","docs\u002Fmcp\u002Fsample_outputs",{"title":71,"path":72,"stem":73},"Rust, C and C++","\u002Fdocs\u002Fnative","docs\u002Fnative",{"title":75,"path":76,"stem":77},"Port gaps: cg parity","\u002Fdocs\u002Fparity","docs\u002Fparity",{"title":79,"path":80,"stem":81},"PHP","\u002Fdocs\u002Fphp","docs\u002Fphp",{"title":83,"path":84,"stem":85},"Planned changes","\u002Fdocs\u002Fplans","docs\u002Fplans",{"title":87,"path":88,"stem":89},"Platform-specific code","\u002Fdocs\u002Fplatforms","docs\u002Fplatforms",{"title":91,"path":92,"stem":93},"Protocol links","\u002Fdocs\u002Fprotocols","docs\u002Fprotocols",{"title":95,"path":96,"stem":97},"Python","\u002Fdocs\u002Fpython","docs\u002Fpython",{"title":99,"path":100,"stem":101},"Quick start","\u002Fdocs\u002Fquickstart","docs\u002Fquickstart",{"title":103,"path":104,"stem":105},"Graph schema","\u002Fdocs\u002Fschema","docs\u002Fschema",{"title":107,"path":108,"stem":109},"Attack surface","\u002Fdocs\u002Fsurface","docs\u002Fsurface",{"title":111,"path":112,"stem":113},"Swift","\u002Fdocs\u002Fswift","docs\u002Fswift",{"title":115,"path":116,"stem":117},"TypeScript \u002F JavaScript frameworks","\u002Fdocs\u002Fts-frameworks","docs\u002Fts-frameworks",{"title":119,"path":120,"stem":121},"How we validate","\u002Fdocs\u002Fvalidation","docs\u002Fvalidation",{"title":123,"path":124,"stem":125},"Validation log","\u002Fdocs\u002Fvalidation-log","docs\u002Fvalidation-log",{"title":127,"path":128,"stem":129},"Value facts and resolutions","\u002Fdocs\u002Fvalue-facts","docs\u002Fvalue-facts",{"title":131,"path":132,"stem":133},"Visual view","\u002Fdocs\u002Fviz","docs\u002Fviz",false,{"id":136,"title":127,"body":137,"description":532,"extension":533,"meta":534,"navigation":535,"path":128,"seo":536,"stem":129,"__hash__":537},"docs\u002Fdocs\u002Fvalue-facts.md",{"type":138,"value":139,"toc":528},"minimark",[140,149,299,357,394,452,479,489,499],[141,142,143,144,148],"p",{},"Facts about values, from the PHP and TypeScript ASTs (",[145,146,147],"code",{},"cg_code_graph\u002Fplugins\u002Flaravel\u002Fvalues.py"," and\nthe TS extractor).",[150,151,152,168],"table",{},[153,154,155],"thead",{},[156,157,158,162,165],"tr",{},[159,160,161],"th",{},"node",[159,163,164],{},"edges",[159,166,167],{},"from",[169,170,171,212,235,248,267],"tbody",{},[156,172,173,179,193],{},[174,175,176],"td",{},[145,177,178],{},"request_key:\u003Ck>",[174,180,181,182,185,186,185,189,192],{},"READS_INPUT (",[145,183,184],{},"via",", ",[145,187,188],{},"flow",[145,190,191],{},"default",")",[174,194,195,198,199,198,202,185,205,185,208,211],{},[145,196,197],{},"$request->input"," \u002F ",[145,200,201],{},"query",[145,203,204],{},"boolean",[145,206,207],{},"request('k')",[145,209,210],{},"$validated['k']"," when that array is request data",[156,213,214,216,222],{},[174,215],{},[174,217,218,219,192],{},"VALIDATES (",[145,220,221],{},"rule",[174,223,224,225,228,229,232,233],{},"FormRequest ",[145,226,227],{},"rules()"," keys. Inline ",[145,230,231],{},"$request->validate([...])"," is not a VALIDATES edge; the key is read through ",[145,234,210],{},[156,236,237,242,245],{},[174,238,239],{},[145,240,241],{},"method:…::rules",[174,243,244],{},"VALIDATED_BY",[174,246,247],{},"an action whose parameter is typed with that FormRequest",[156,249,250,255,258],{},[174,251,252],{},[145,253,254],{},"setting:\u003Ckey>",[174,256,257],{},"READS_SETTING \u002F WRITES_SETTING",[174,259,260,198,263,266],{},[145,261,262],{},"getSetting",[145,264,265],{},"setSetting"," on a class that declares them",[156,268,269,274,286],{},[174,270,271],{},[145,272,273],{},"resolution:\u003Cfn>#\u003Ctarget>@\u003Cline>",[174,275,276,277,185,280,185,283,192],{},"HAS_RESOLUTION, FALLS_BACK_TO (",[145,278,279],{},"order",[145,281,282],{},"ambiguous",[145,284,285],{},"candidates",[174,287,288,289,198,292,198,295,298],{},"a ",[145,290,291],{},"??",[145,293,294],{},"?:",[145,296,297],{},"match"," chain, or a helper with two or more ordered early returns",[141,300,301,302,185,305,185,308,311,312,198,315,198,318,321,322,325,326,328,329,332,333,198,336,339,340,343,344,347,348,351,352,356],{},"The same request arrays feed column writes: when ",[145,303,304],{},"validated()",[145,306,307],{},"safe()->only([...])",[145,309,310],{},"all()"," and the like reach the array argument of ",[145,313,314],{},"update",[145,316,317],{},"create",[145,319,320],{},"fill"," (directly, through a local, a parameter or ",[145,323,324],{},"array_merge","), the FormRequest ",[145,327,227],{}," keys (or the inline ",[145,330,331],{},"validate([...])"," keys), narrowed by the model's ",[145,334,335],{},"$fillable",[145,337,338],{},"$guarded",", become ",[145,341,342],{},"WRITES_COLUMN"," edges with ",[145,345,346],{},"attrs.via"," and ",[145,349,350],{},"attrs.keys_from"," (",[353,354,79],"a",{"href":355},"\u002Fdocs\u002Fphp#column-writes-by-mass-assignment-177",").",[141,358,359,360,185,362,185,364,185,367,370,371,374,375,378,379,185,382,385,386,389,390,393],{},"Request-array flow is a fixpoint over call arguments, through more than one helper. Sources are\nrequest accessors (",[145,361,304],{},[145,363,310],{},[145,365,366],{},"input()",[145,368,369],{},"only()",", … on a receiver typed\nRequest or FormRequest), ",[145,372,373],{},"request()",", arrays built from request keys, and app functions that\nreturn request data. The result is a per-parameter fact with an evidence trail. In the bookstore\nsample, ",[145,376,377],{},"SalesReportService::build"," reads ",[145,380,381],{},"$filters['timezone']",[145,383,384],{},"report()"," passes ",[145,387,388],{},"$filters",", and ",[145,391,392],{},"ReportController::top"," passes the validated request.",[141,395,396,397,198,399,401,402,404,405,408,409,412,413,416,417,420,421,424,425,428,429,185,431,347,434,436,437,185,440,443,444,447,448,451],{},"A resolution site is an assignment or return whose expression is a ",[145,398,291],{},[145,400,294],{}," chain (ternaries\nand ",[145,403,297],{}," are expanded), or a function with at least two ordered early returns (",[145,406,407],{},"resolveX()","). Each operand becomes an atom: request key, setting (plus its literal default), model\nattribute → column (",[145,410,411],{},"default_timezone"," → ",[145,414,415],{},"stores.default_timezone","), a builder ",[145,418,419],{},"value('col')",", config\u002Fenv, or a literal. A receiver that can be several models (",[145,422,423],{},"Income|Expense $doc",", or a\nvariable assigned from either) reads one column per model as one step. The signature names them\nall (",[145,426,427],{},"column:expenses.paid_at|incomes.paid_at",") and each FALLS_BACK_TO edge of that step has\nthe same ",[145,430,279],{},[145,432,433],{},"ambiguous: true",[145,435,285],{},". Candidates narrow to the tables whose\nmigrations declare the column, else to the tables the migrations create. Transparent wrappers (\n",[145,438,439],{},"strtoupper",[145,441,442],{},"trim",", casts) are ",[145,445,446],{},"norm",". Locals are inlined from their assignment. Parameters\nexpand through their call sites (depth ≤ 4). A site is kept when its chain has a source and at\nleast two entries. The flattened ",[145,449,450],{},"signature"," is stored on the node.",[141,453,454,455,458,459,462,463,466,467,470,471,474,475,478],{},"In TypeScript, the outermost ",[145,456,457],{},"a ?? b || 'LIT'"," chain that ends in a string or number literal is\na ",[145,460,461],{},"resolution:"," node of the enclosing function or component (in the sample,\n",[145,464,465],{},"rows.value[0]?.timezone ?? 'UTC'"," in ",[145,468,469],{},"pages\u002Freports\u002F[id].vue","). Client call sites record the\nkeys they pass through variables and builder calls (",[145,472,473],{},"arg_keys",", conditional keys apart). A\nrequest builder that forwards a typed parameter takes its keys from the type (",[145,476,477],{},"forwarded",",\nwith the argument position).",[480,481,487],"pre",{"className":482,"code":484,"language":485,"meta":486},[483],"language-text","$ cg resolutions timezone --db out\u002Fapp.db\n[A] input:timezone > column:orders.customer_timezone > setting:locale.timezone > column:stores.default_timezone > 'UTC'\n    ReportController::resolveTimezone  @ app\u002FHttp\u002FControllers\u002FReportController.php:43\n[B] input:timezone > setting:reports.timezone > 'UTC'\n    SalesReportService::build  $timezone  @ app\u002FServices\u002FSalesReportService.php:17\n  [A] vs [B]: same up to input:timezone; then column:orders.customer_timezone vs setting:reports.timezone; same final fallback 'UTC'\n  GET \u002Fapi\u002Fv1\u002Fmain\u002Fadmin\u002Freports\u002Ftop -> chain B\n     request useReports.fetchTop  builder keys: timezone: conditional\n       called by pages\u002Freports\u002F[id].vue  sends timezone=no\n       client fallback: rows.value[0]?.timezone ?? 'UTC'\n       => 'timezone': never sent (builder key is conditional and no call site passes it)\n","text","",[145,488,484],{"__ignoreMap":486},[141,490,491,494,495,498],{},[145,492,493],{},"cg resolutions CONCEPT [--within SUBSTR] [--no-client] [--json]"," (MCP ",[145,496,497],{},"resolutions","):",[500,501,502,506,509,512],"ol",{},[503,504,505],"li",{},"Sites whose target name or first source key has the concept as its head word (singular and\nplural).",[503,507,508],{},"Chains grouped by signature, with the routes that reach each site.",[503,510,511],{},"Divergence between request-driven chains: common prefix, first differing step, final\nfallback.",[503,513,514,515,185,518,521,522,185,525,356],{},"Client: for each frontend endpoint on those routes, whether the builder key is always,\nconditional, absent or unknown, and a verdict (",[145,516,517],{},"sent",[145,519,520],{},"sent by some call sites",",\n",[145,523,524],{},"never sent",[145,526,527],{},"unknown",{"title":486,"searchDepth":529,"depth":530,"links":531},4,2,[],"Facts about values, from the PHP and TypeScript ASTs (cg_code_graph\u002Fplugins\u002Flaravel\u002Fvalues.py and\nthe TS extractor).","md",{},true,{"title":127,"description":532},"uZY2KfldIxJSUk67-Kzrqi8HsPZmXdGAM2l2-966FvE",[539,541],{"title":123,"path":124,"stem":125,"description":540,"children":-1},"Per-corpus tables behind How we validate. Shallow clones, default branch, October 2026. \"Unchanged corpora\" notes stay here.",{"title":131,"path":132,"stem":133,"description":486,"children":-1},1792170234698]