[{"data":1,"prerenderedAt":1328},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fkotlin":135,"\u002Fdocs\u002Fkotlin-surround":1323},[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":54,"body":137,"description":1317,"extension":1318,"meta":1319,"navigation":1320,"path":55,"seo":1321,"stem":56,"__hash__":1322},"docs\u002Fdocs\u002Fkotlin.md",{"type":138,"value":139,"toc":1311},"minimark",[140,174,179,246,273,367,370,377,441,500,526,610,657,661,675,890,979,983,1206,1307],[141,142,143,144,148,149,152,153,157,158,162,163,165,166,169,170,173],"p",{},"What ",[145,146,147],"code",{},".kt"," \u002F ",[145,150,151],{},".kts"," add beyond ",[154,155,156],"a",{"href":47},"Install",", ",[154,159,161],{"href":160},"\u002Fdocs\u002Fcli#query-targets-specs","CLI specs",", and ",[154,164,103],{"href":104},": heuristic vs scip-java, the env flags, and the ids those pages do not spell out. Toolchain fit: ",[145,167,168],{},"cg doctor -h",". Why a file stayed heuristic: ",[145,171,172],{},"cg coverage",".",[175,176,178],"h2",{"id":177},"modes","Modes",[180,181,182,198],"table",{},[183,184,185],"thead",{},[186,187,188,192,195],"tr",{},[189,190,191],"th",{},"mode",[189,193,194],{},"calls",[189,196,197],{},"needs",[199,200,201,223],"tbody",{},[186,202,203,207,213],{},[204,205,206],"td",{},"heuristic (default)",[204,208,209,210],{},"name resolution, labelled ",[145,211,212],{},"heuristic",[204,214,215,216,157,219,222],{},"tree-sitter (",[145,217,218],{},"tree-sitter",[145,220,221],{},"tree-sitter-kotlin","). No JDK or Gradle",[186,224,225,228,238],{},[204,226,227],{},"exact",[204,229,230,231,148,234,237],{},"compiler-resolved ",[145,232,233],{},"CALLS",[145,235,236],{},"INSTANTIATES","; declarations and framework facts stay the syntax layer",[204,239,240,241,245],{},"scip-java, opt-in (",[154,242,244],{"href":243},"#exact-mode","Exact mode",")",[141,247,248,251,252,254,255,258,259,262,263,157,266,269,270,173],{},[145,249,250],{},"--min-confidence resolved"," (or ",[145,253,227],{},") hides the heuristic call edges. Gradle ",[145,256,257],{},"build\u002F"," (including KSP \u002F kapt), ",[145,260,261],{},".gradle",", and IDE folders are skipped. tree-sitter-kotlin 1.1.0 rewrites some sources before parse (same length, so lines and names stay). A file that still errors is split into members (",[145,264,265],{},"files_reparsed_by_member",[145,267,268],{},"members_dropped_by_reparse","); dropped members are in ",[145,271,272],{},"cg coverage --details",[180,274,275,288],{},[183,276,277],{},[186,278,279,282,285],{},[189,280,281],{},"rewrite",[189,283,284],{},"when",[189,286,287],{},"stat",[199,289,290,318,346],{},[186,291,292,302,313],{},[204,293,294,297,298,301],{},[145,295,296],{},"suspend"," blanked, or ",[145,299,300],{},";"," plus spaces when it starts a statement",[204,303,304,157,307,157,310],{},[145,305,306],{},"val b = suspend { }",[145,308,309],{},"to suspend { }",[145,311,312],{},"suspend { }.runCatching(...)",[204,314,315],{},[145,316,317],{},"suspend_lambdas_rewritten",[186,319,320,325,341],{},[204,321,322,323],{},"one leading space → ",[145,324,300],{},[204,326,327,148,330,333,334,148,337,340],{},[145,328,329],{},"get",[145,331,332],{},"set"," call right after a ",[145,335,336],{},"val",[145,338,339],{},"var"," (Ktor routing)",[204,342,343],{},[145,344,345],{},"accessor_like_calls_rewritten",[186,347,348,357,362],{},[204,349,350,353,354],{},[145,351,352],{},"dynamic"," parsed as ",[145,355,356],{},"dynamiC",[204,358,359,360],{},"a call or function named ",[145,361,352],{},[204,363,364],{},[145,365,366],{},"keyword_named_calls_rewritten",[175,368,244],{"id":369},"exact-mode",[141,371,372,373,376],{},"A scip-java index replaces name-based call edges. Ids stay the syntax layer's, so queries and ",[145,374,375],{},"cg link"," match both modes. Running scip-java runs the project's Gradle \u002F Maven build, so it is opt-in.",[180,378,379,389],{},[183,380,381],{},[186,382,383,386],{},[189,384,385],{},"source",[189,387,388],{},"how",[199,390,391,401,411],{},[186,392,393,398],{},[204,394,395],{},[145,396,397],{},"cg index --scip index.scip",[204,399,400],{},"Kotlin documents go to this plugin, not the generic SCIP importer",[186,402,403,408],{},[204,404,405],{},[145,406,407],{},"CG_KOTLIN_SCIP_FILE",[204,409,410],{},"a prebuilt index",[186,412,413,418],{},[204,414,415],{},[145,416,417],{},"CG_KOTLIN_SCIP=1",[204,419,420,421,424,425,428,429,432,433,436,437,440],{},"cg runs ",[145,422,423],{},"scip-java index"," (cache ",[145,426,427],{},"~\u002F.cache\u002Fcg\u002Fscip","; ",[145,430,431],{},"CG_NO_CACHE=1"," forces a run; ",[145,434,435],{},"CG_INDEXER_TIMEOUT"," caps it). ",[145,438,439],{},"CG_JAVA_SCIP=1"," starts the same run; one project root is indexed once and both plugins read it",[180,442,443,456],{},[183,444,445],{},[186,446,447,450,453],{},[189,448,449],{},"scip-java",[189,451,452],{},"Kotlin (Gradle builds checked)",[189,454,455],{},"install",[199,457,458,471,489],{},[186,459,460,463,466],{},[204,461,462],{},"0.12.x",[204,464,465],{},"up to 2.1",[204,467,468],{},[145,469,470],{},"cs install scip-java",[186,472,473,476,479],{},[204,474,475],{},"0.13.x",[204,477,478],{},"2.2.0–2.2.10",[204,480,481,482,485,486],{},"launcher; ",[145,483,484],{},"CG_SCIP_JAVA"," is one path or several joined by ",[145,487,488],{},":",[186,490,491,494,497],{},[204,492,493],{},"none",[204,495,496],{},"2.2.20 and newer",[204,498,499],{},"stays heuristic",[141,501,502,503,157,506,509,510,513,514,517,518,521,522,525],{},"cg reads the version the build declares, tries the matching release first, then the next if the compiler plugin does not load. Index stats record ",[145,504,505],{},"kotlin_version",[145,507,508],{},"indexer",", and failed ",[145,511,512],{},"attempts",". ",[145,515,516],{},"cg doctor \u003Cproject>"," names the release that fits. ",[145,519,520],{},"install.sh --with kotlin"," installs the supported pair (Windows: ",[145,523,524],{},"cg doctor",").",[141,527,528,529,532,533,537,538,541,542,545,546,549,550,553,554,157,557,162,560,148,563,148,566,569,570,573,574,576,577,157,580,157,582,162,584,148,586,148,588,537,590,594,595,598,599,537,602,605,606,609],{},"Java in that index becomes ",[145,530,531],{},"java"," nodes with the ",[154,534,536],{"href":535},"\u002Fdocs\u002Fjava#what-is-extracted","Java plugin's ids"," (",[145,539,540],{},"method:pkg.Foo.bar",", not ",[145,543,544],{},"method:pkg.Foo::bar","), including fields, and exact Kotlin ↔ Java and Java → Java calls, including ",[145,547,548],{},"AppKt.build()",", a ",[145,551,552],{},"@file:JvmName"," facade, ",[145,555,556],{},"Foo.Companion.x()",[145,558,559],{},"@JvmStatic",[145,561,562],{},"getX",[145,564,565],{},"isX",[145,567,568],{},"setX"," on a Kotlin property. The two layers do not create a second node for the same Java symbol. Without the index, ",[145,571,572],{},".java"," files are indexed by the ",[154,575,50],{"href":51}," plugin (heuristic), and Kotlin → Java calls resolve through imports and the same package; Java → Kotlin calls resolve ",[145,578,579],{},"FooKt.bar()",[145,581,556],{},[145,583,559],{},[145,585,562],{},[145,587,568],{},[145,589,565],{},[154,591,593],{"href":592},"\u002Fdocs\u002Fjava#kotlin-interop","Java interop","). A ",[145,596,597],{},"--scip"," file with Java documents is consumed by the Java plugin. Go and other languages still use the generic importer. Spring facts for both languages are extracted by the shared JVM module ",[145,600,601],{},"cg_code_graph\u002Fplugins\u002Fjvm\u002Fspring.py",[154,603,50],{"href":604},"\u002Fdocs\u002Fjava#spring","). Stats ",[145,607,608],{},"exact_vs_heuristic"," is precision (heuristic call edges the compiler confirms) and recall (compiler edges the heuristic layer had found). Property read \u002F write edges stay and are left out of that pair; a property read is not a call in the SCIP index.",[180,611,612,622],{},[183,613,614],{},[186,615,616,619],{},[189,617,618],{},"still heuristic",[189,620,621],{},"why",[199,623,624,639,649],{},[186,625,626,629],{},[204,627,628],{},"Android modules",[204,630,631,632,537,635,638],{},"the build needs the SDK, and scip-java does not compile ",[145,633,634],{},"compileDebugKotlin",[145,636,637],{},"android_modules"," in the stats; named in the coverage reason)",[186,640,641,646],{},[204,642,643],{},[145,644,645],{},"FAIL_ON_PROJECT_REPOS",[204,647,648],{},"Android template default rejects the repository the scip-java Gradle plugin adds",[186,650,651,654],{},[204,652,653],{},"files the index omits",[204,655,656],{},"those files keep heuristic calls, counted in the reason",[175,658,660],{"id":659},"query-specs","Query specs",[141,662,663,666,667,670,671,674],{},[145,664,665],{},"Class.method"," and ",[145,668,669],{},"Class::method"," follow ",[154,672,673],{"href":160},"query targets",". Kotlin-only shapes:",[180,676,677,687],{},[183,678,679],{},[186,680,681,684],{},[189,682,683],{},"spec or id",[189,685,686],{},"selects",[199,688,689,706,743,768,810,841,858],{},[186,690,691,699],{},[204,692,693,157,696],{},[145,694,695],{},"method:\u003CType>.\u003Cname>",[145,697,698],{},"function:\u003Cpkg>.\u003Cname>",[204,700,701,702,705],{},"a member, or a top-level \u002F extension function (",[145,703,704],{},"receiver"," on an extension)",[186,707,708,713],{},[204,709,710],{},[145,711,712],{},"function:pkg.name@android",[204,714,715,716,537,719,722,723,726,727,157,730,157,733,736,737,157,740],{},"one platform's ",[145,717,718],{},"actual",[145,720,721],{},"IMPLEMENTED_BY"," from ",[145,724,725],{},"expect","). Source sets (",[145,728,729],{},"androidMain",[145,731,732],{},"iosMain",[145,734,735],{},"iosTest",", …) carry platform tags — ",[145,738,739],{},"cg platforms",[145,741,742],{},"--platform",[186,744,745,750],{},[204,746,747],{},[145,748,749],{},"page:kotlin:orders\u002F{id}",[204,751,752,753,756,757,760,761,764,765,245],{},"Compose Navigation, typed routes, or Navigation 3 ",[145,754,755],{},"entry",". A nested destination keeps its outer class (",[145,758,759],{},"page:kotlin:SettingsRoute.Standard","); a wrapper of ",[145,762,763],{},"composable\u003CT>"," still yields a page (",[145,766,767],{},"attrs.wrapper",[186,769,770,775],{},[204,771,772],{},[145,773,774],{},"field:\u003CType>.\u003Cname>",[204,776,777,778,148,780,782,783,148,786,789,790,157,793,162,796,799,800,803,804,148,807],{},"a stored ",[145,779,336],{},[145,781,339],{}," (constructor property included): ",[145,784,785],{},"READS_PROP",[145,787,788],{},"WRITES_PROP"," for ",[145,791,792],{},"x",[145,794,795],{},"this.x",[145,797,798],{},"v.x"," when ",[145,801,802],{},"v","'s type is known. ",[145,805,806],{},"cg readers Type.prop",[145,808,809],{},"cg writers Type.prop",[186,811,812,820],{},[204,813,814,157,817],{},[145,815,816],{},"enum_case:\u003CEnum>.NAME",[145,818,819],{},"constant:\u003CType>.NAME",[204,821,822,825,826,829,830,833,834,837,838,840],{},[145,823,824],{},"USES_VALUE"," when the spelling is certain (",[145,827,828],{},"Color.RED",", a companion's ",[145,831,832],{},"K.A","). An ",[145,835,836],{},"object","'s ",[145,839,336],{},"s stay constants",[186,842,843,848],{},[204,844,845],{},[145,846,847],{},"route:GET \u002Fa\u002F{id}",[204,849,850,851,148,854,857],{},"Ktor ",[145,852,853],{},"routing",[145,855,856],{},"fun Route.x()",", or a Spring mapping",[186,859,860,865],{},[204,861,862],{},[145,863,864],{},"http:METHOD path",[204,866,867,868,148,871,874,875,878,879,882,883,886,887,889],{},"Retrofit (",[145,869,870],{},"@GET",[145,872,873],{},"@HTTP"," plus ",[145,876,877],{},"baseUrl","), Ktor client, or OkHttp. ",[145,880,881],{},"\"$base\u002Fx\""," keeps ",[145,884,885],{},"{base}"," so ",[145,888,375],{}," can match the path",[141,891,892,893,148,895,157,897,900,901,148,904,907,908,911,912,537,914,148,917,148,920,923,924,513,927,930,931,537,934,157,937,940,941,148,944,148,947,148,950,953,954,957,958,961,962,965,966,148,969,971,972,157,975,978],{},"A custom ",[145,894,329],{},[145,896,332],{},[145,898,899],{},"by lazy",", or other delegate is a ",[145,902,903],{},"method:",[145,905,906],{},"function:"," node (",[145,909,910],{},"kotlin_kind: property","). Reads and writes are ",[145,913,233],{},[145,915,916],{},"property: read",[145,918,919],{},"write",[145,921,922],{},"read_write","); calls inside the accessor carry ",[145,925,926],{},"accessor",[145,928,929],{},"impact"," prints a callable reference as ",[145,932,933],{},"(ref: callback)",[145,935,936],{},"REFERENCES_FN",[145,938,939],{},"how: callback",", both modes), an accessor body as ",[145,942,943],{},"(get)",[145,945,946],{},"(set)",[145,948,949],{},"(lazy)",[145,951,952],{},"(delegate)",", and a stored-property initializer as ",[145,955,956],{},"(in a property)",". Two to five methods of one name are ",[145,959,960],{},"candidate"," edges (",[145,963,964],{},"binding: \"candidate\"","): flagged by ",[145,967,968],{},"cg tests",[145,970,929],{},", left out of platform divergence. A library-typed receiver (",[145,973,974],{},"Headers.build { }",[145,976,977],{},"client: HttpClient",") is not bound by name.",[175,980,982],{"id":981},"framework-facts","Framework facts",[180,984,985,995],{},[183,986,987],{},[186,988,989,992],{},[189,990,991],{},"area",[189,993,994],{},"what you can query",[199,996,997,1017,1083,1125,1159],{},[186,998,999,1002],{},[204,1000,1001],{},"Ktor",[204,1003,1004,1005,1008,1009,1012,1013,1016],{},"each handler lambda is its own node; ",[145,1006,1007],{},"authenticate(\"jwt\")"," is the route's guard; ",[145,1010,1011],{},"get\u003CArticles.Id>"," takes the path from ",[145,1014,1015],{},"@Resource"," and its parent",[186,1018,1019,1022],{},[204,1020,1021],{},"Spring",[204,1023,1024,1025,537,1027,1029,1030,1033,1034,148,1037,148,1040,1043,1044,1047,1048,1051,1052,1055,1056,1059,1060,1063,1064,666,1067,148,1070,148,1073,148,1076,148,1079,1082],{},"same facts as Java, from ",[145,1026,601],{},[154,1028,50],{"href":604},"): class ",[145,1031,1032],{},"@RequestMapping"," prefixes; ",[145,1035,1036],{},"@PreAuthorize",[145,1038,1039],{},"@Secured",[145,1041,1042],{},"@RolesAllowed"," as guards; the first ",[145,1045,1046],{},"SecurityFilterChain"," whose ",[145,1049,1050],{},"securityMatcher"," matches (by ",[145,1053,1054],{},"@Order",", then source order; a chain with none matches every route; a ",[145,1057,1058],{},"RequestMatcher"," bean is skipped, ",[145,1061,1062],{},"security_chains_unknown_matcher","); ",[145,1065,1066],{},"@Scheduled",[145,1068,1069],{},"@KafkaListener",[145,1071,1072],{},"@RabbitListener",[145,1074,1075],{},"@JmsListener",[145,1077,1078],{},"@SqsListener",[145,1080,1081],{},"@EventListener"," entry points",[186,1084,1085,1088],{},[204,1086,1087],{},"Tables",[204,1089,1090,1091,157,1094,1097,1098,148,1101,148,1104,148,1107,1110,1111,148,1114,1117,1118,1121,1122],{},"Spring Data calls on a repository receiver (",[145,1092,1093],{},"JpaRepository",[145,1095,1096],{},"CrudRepository",", coroutine \u002F reactive \u002F Mongo) and Exposed ",[145,1099,1100],{},"selectAll",[145,1102,1103],{},"insert",[145,1105,1106],{},"update",[145,1108,1109],{},"deleteWhere"," → ",[145,1112,1113],{},"READS_TABLE",[145,1115,1116],{},"WRITES_TABLE",". Table name: ",[145,1119,1120],{},"@Table"," or Spring Boot snake_case; Exposed uses the name argument, or the object name without ",[145,1123,1124],{},"Table",[186,1126,1127,1130],{},[204,1128,1129],{},"Android",[204,1131,1132,1133,1136,1137,1140,1141,148,1144,148,1147,537,1150,1063,1153,1110,1156],{},"manifest activities (",[145,1134,1135],{},"ui_page","), services \u002F receivers \u002F providers (",[145,1138,1139],{},"listener","), deep links, ",[145,1142,1143],{},"Worker",[145,1145,1146],{},"CoroutineWorker",[145,1148,1149],{},"JobService",[145,1151,1152],{},"queue_job",[145,1154,1155],{},"navigate(...)",[145,1157,1158],{},"NAVIGATES_TO",[186,1160,1161,1164],{},[204,1162,1163],{},"Tests",[204,1165,1166,157,1169,157,1172,1175,1176,1179,1180,157,1183,157,1186,157,1189,157,1192,513,1195,1198,1199,1202,1203],{},[145,1167,1168],{},"src\u002Ftest",[145,1170,1171],{},"src\u002FandroidTest",[145,1173,1174],{},"*Test"," source sets, ",[145,1177,1178],{},"*Test.kt",". Framework from imports: ",[145,1181,1182],{},"junit5",[145,1184,1185],{},"junit4",[145,1187,1188],{},"kotlin-test",[145,1190,1191],{},"testng",[145,1193,1194],{},"kotest",[145,1196,1197],{},"androidTest"," counts as UI; a path through an ",[145,1200,1201],{},"*Activity"," is omitted unless ",[145,1204,1205],{},"--through-roots",[1207,1208,1213],"pre",{"className":1209,"code":1210,"language":1211,"meta":1212,"style":1212},"language-bash shiki shiki-themes cg-light cg-light cg-dark","cg index examples\u002Fbookstore-django  --db \u002Ftmp\u002Fdj.db\ncg index examples\u002Fbookstore-android --db \u002Ftmp\u002Fandroid.db\ncg link --backend \u002Ftmp\u002Fdj.db --frontend \u002Ftmp\u002Fandroid.db --db \u002Ftmp\u002Fandroid-link.db\ncg path \"page:kotlin:checkout\u002F{bookId}\" \"table:catalog_order\" --db \u002Ftmp\u002Fandroid-link.db\n","bash","",[145,1214,1215,1237,1253,1278],{"__ignoreMap":1212},[1216,1217,1220,1224,1228,1231,1234],"span",{"class":1218,"line":1219},"line",1,[1216,1221,1223],{"class":1222},"sZJo5","cg",[1216,1225,1227],{"class":1226},"sha9Y"," index",[1216,1229,1230],{"class":1226}," examples\u002Fbookstore-django",[1216,1232,1233],{"class":1226},"  --db",[1216,1235,1236],{"class":1226}," \u002Ftmp\u002Fdj.db\n",[1216,1238,1240,1242,1244,1247,1250],{"class":1218,"line":1239},2,[1216,1241,1223],{"class":1222},[1216,1243,1227],{"class":1226},[1216,1245,1246],{"class":1226}," examples\u002Fbookstore-android",[1216,1248,1249],{"class":1226}," --db",[1216,1251,1252],{"class":1226}," \u002Ftmp\u002Fandroid.db\n",[1216,1254,1256,1258,1261,1264,1267,1270,1273,1275],{"class":1218,"line":1255},3,[1216,1257,1223],{"class":1222},[1216,1259,1260],{"class":1226}," link",[1216,1262,1263],{"class":1226}," --backend",[1216,1265,1266],{"class":1226}," \u002Ftmp\u002Fdj.db",[1216,1268,1269],{"class":1226}," --frontend",[1216,1271,1272],{"class":1226}," \u002Ftmp\u002Fandroid.db",[1216,1274,1249],{"class":1226},[1216,1276,1277],{"class":1226}," \u002Ftmp\u002Fandroid-link.db\n",[1216,1279,1281,1283,1286,1290,1293,1296,1298,1301,1303,1305],{"class":1218,"line":1280},4,[1216,1282,1223],{"class":1222},[1216,1284,1285],{"class":1226}," path",[1216,1287,1289],{"class":1288},"sZ_TN"," \"",[1216,1291,1292],{"class":1226},"page:kotlin:checkout\u002F{bookId}",[1216,1294,1295],{"class":1288},"\"",[1216,1297,1289],{"class":1288},[1216,1299,1300],{"class":1226},"table:catalog_order",[1216,1302,1295],{"class":1288},[1216,1304,1249],{"class":1226},[1216,1306,1277],{"class":1226},[1308,1309,1310],"style",{},"html pre.shiki code .sZJo5, html code.shiki .sZJo5{--shiki-light:#65A30D;--shiki-default:#65A30D;--shiki-dark:#84CC16}html pre.shiki code .sha9Y, html code.shiki .sha9Y{--shiki-light:#9F8CFF;--shiki-default:#9F8CFF;--shiki-dark:#C4B5FD}html pre.shiki code .sZ_TN, html code.shiki .sZ_TN{--shiki-light:#71717A;--shiki-default:#71717A;--shiki-dark:#A1A1AA}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);}",{"title":1212,"searchDepth":1280,"depth":1239,"links":1312},[1313,1314,1315,1316],{"id":177,"depth":1239,"text":178},{"id":369,"depth":1239,"text":244},{"id":659,"depth":1239,"text":660},{"id":981,"depth":1239,"text":982},"What .kt \u002F .kts add beyond Install, CLI specs, and Graph schema: heuristic vs scip-java, the env flags, and the ids those pages do not spell out. Toolchain fit: cg doctor -h. Why a file stayed heuristic: cg coverage.","md",{},true,{"title":54,"description":1317},"gzuStYa8Xks35zHn09XhUOxxQiMpDsB7Z_AVGoKR3RE",[1324,1326],{"title":50,"path":51,"stem":52,"description":1325,"children":-1},"What .java adds beyond Install, CLI specs, and Graph schema: the heuristic syntax layer and the ids those pages do not spell out. Toolchain fit: cg doctor. Why a file stayed heuristic: cg coverage.",{"title":58,"path":59,"stem":60,"description":1327,"children":-1},"code-graph is beta. This page is the cross-cutting ceiling: how far an answer reaches when the graph is incomplete.\nLanguage gaps are on the language pages, linked at the end.",1792170235604]