timestamp	searchText	foundText	similarity	executionTime	exactMatchCount	expectedReplacements	fuzzyThreshold	belowThreshold	diff	searchLength	foundLength	fileExtension	characterCodes	uniqueCharacterCount	diffLength
2026-07-29T01:59:45.625Z	                  } else if (!io.KeyCtrl) {\n                    sketchSeciliKisit.clear();\n                    if (!sketchSecili.empty()) { sketchSecili.clear(); sketchSecimYay(); }\n                  }\n                }\n              } else\n	 sleep_until sabit kadans; geride kalınca sıfırla (spiral-of-death önle).\n    // Oto-test/senaryo (kareIstekAcik()==false) sınırsız kalır.\n    const int fps = hedefFps();\n    if (kareIstekAcik() && fps > 0) {\n      sonrakiKare += std::chrono::microseconds(1000000 / fps);\n      const auto simdi = std::chrono::steady_clock::now();\n      if (sonrakiKare > simdi) std::this_thread::sleep_until(sonrakiKare);\n      else sonrakiKare = simdi;  // geride kaldık → kadansı sıfırla\n    } else	0.2252066115702479	125.17639999836683	0	1	0.7	true	 {-                 } else if (!io.KeyCtrl) {\n                    sketchSeciliKisit.clear();\n                    if (!sketchSecili.empty()) { sketchSecili.clear(); sketchSecimYay(); }\n                  }\n                }\n              } else\n-}{+sleep_until sabit kadans; geride kalınca sıfırla (spiral-of-death önle).\n    // Oto-test/senaryo (kareIstekAcik()==false) sınırsız kalır.\n    const int fps = hedefFps();\n    if (kareIstekAcik() && fps > 0) {\n      sonrakiKare += std::chrono::microseconds(1000000 / fps);\n      const auto simdi = std::chrono::steady_clock::now();\n      if (sonrakiKare > simdi) std::this_thread::sleep_until(sonrakiKare);\n      else sonrakiKare = simdi;  // geride kaldık → kadansı sıfırla\n    } else+}	241	484	.cpp	10:14[\x0a],32:199[ ],33:2[!],38:2[&],40:16[(],41:16[)],43:1[+],45:3[-],46:6[.],47:6[/],48:7[0],49:1[1],58:14[:],59:9[;],61:6[=],62:2[>],65:2[A],67:1[C],70:1[F],73:2[I],75:6[K],79:1[O],83:4[S],89:1[Y],95:4[_],97:31[a],98:1[b],99:21[c],100:16[d],101:46[e],102:12[f],103:2[g],104:10[h],105:35[i],107:21[k],108:23[l],109:6[m],110:19[n],111:19[o],112:8[p],114:25[r],115:44[s],116:26[t],117:3[u],119:1[w],121:5[y],122:1[z],123:3[{],125:6[}],246:1[\xf6],305:11[\x131],8594:1[\x2192]	52	723
2026-08-04T10:19:22.326Z	    strafor_penceresi.cpp\n    ayarlar_penceresi.cpp	  orkestra_tcp_win.cpp\n  orkestra_kripto.cpp\n  istakip_ag.cpp\n  test/test_geri_bildirim.cpp	0.32978723404255317	47.87609999999404	0	1	0.7	true	  {-  strafor_penceresi.cpp\n    ayarlar_penceresi-}{+orkestra_tcp_win.cpp\n  orkestra_kripto.cpp\n  istakip_ag.cpp\n  test/test_geri_bildirim+}.cpp	51	94	.txt	10:4[\x0a],13:3[\x0d],32:12[ ],46:4[.],47:1[/],95:8[_],97:8[a],98:1[b],99:7[c],100:1[d],101:11[e],102:1[f],103:2[g],105:10[i],107:4[k],108:2[l],109:1[m],110:3[n],111:4[o],112:13[p],114:13[r],115:8[s],116:10[t],119:1[w],121:1[y]	25	133
2026-08-07T01:51:25.367Z	    const auto yuklenen = stepYukle(yol);\n    FIKO_KONTROL(yuklenen.size() == 1);\n    FIKO_YAKIN(yuklenen[0].govde.hacim(), 210.0, 1e-3);\n    std::remove(yol.c_str());	NTROL(topolojiOzeti(ke).kenarSayi > 0);\n  FIKO_KONTROL(topolojiOzeti(ke).katiSayi == 0);   // egri, kati degil\n}\n\nFIKO_TEST(gsd_afin_hacim_carpani) {\n  // Non-uniform afin: 10x10x10 kutu, oran (2,3,1) → hacim x6 = 6000.\n  BrepGovde k = kutu(10, 10, 10);\n  FIKO_YAKIN(k.hacim(), 1000.0, 1e-6);\n  const BrepGovde a = afin(k, 2.0, 3.0, 1	0.23353293413173648	68.4795000012964	0	1	0.7	true	{-    const auto yuklenen = stepYukle(yol);\n    FIKO_KONTROL(yuklenen.size() == 1);\n    FIKO_YAKIN(yuklenen[0].govde.hacim(), 210.0, 1e-3);\n    std::remove(yol.c_str());-}{+NTROL(topolojiOzeti(ke).kenarSayi > 0);\n  FIKO_KONTROL(topolojiOzeti(ke).katiSayi == 0);   // egri, kati degil\n}\n\nFIKO_TEST(gsd_afin_hacim_carpani) {\n  // Non-uniform afin: 10x10x10 kutu, oran (2,3,1) → hacim x6 = 6000.\n  BrepGovde k = kutu(10, 10, 10);\n  FIKO_YAKIN(k.hacim(), 1000.0, 1e-6);\n  const BrepGovde a = afin(k, 2.0, 3.0, 1+}	167	334	.cpp	10:11[\x0a],32:70[ ],40:17[(],41:16[)],44:13[,],45:3[-],46:12[.],47:4[/],48:20[0],49:13[1],50:3[2],51:3[3],54:3[6],58:3[:],59:8[;],61:8[=],62:1[>],65:2[A],66:2[B],69:1[E],70:5[F],71:2[G],73:7[I],75:9[K],76:3[L],78:6[N],79:12[O],82:3[R],83:3[S],84:5[T],89:3[Y],91:1[[],93:1[]],95:9[_],97:17[a],99:8[c],100:6[d],101:25[e],102:4[f],103:4[g],104:4[h],105:20[i],106:2[j],107:14[k],108:9[l],109:6[m],110:16[n],111:18[o],112:6[p],114:9[r],115:7[s],116:14[t],117:10[u],118:4[v],120:3[x],121:7[y],122:3[z],123:1[{],125:1[}],8594:1[\x2192]	60	501
2026-08-18T02:30:48.199Z	  // ---- Toast bildirimleri (tüm pencerelerin üstünde, kare-sonu tek çağrı) ----\n  toastlariCiz();	e) ----\n  const auto catOpEkle = [&](cam::CamIslemTipCatia tip) {\n    panelAgac = true;  // CAM düğümleri ana Ürün Ağacı'nda görünür\n    const u32 k = camSis.opEkle(tip);\n    camOperasyonPencereAc(k);	0.21999999999999997	86.49630000023171	0	1	0.7	true	{-  // ---- Toast bildirimleri (tüm pencerelerin üstünde, kare-sonu tek çağrı) ----\n  toastlariCiz(-}{+e) ----\n  const auto catOpEkle = [&](cam::CamIslemTipCatia tip) {\n    panelAgac = true;  // CAM düğümleri ana Ürün Ağacı'nda görünür\n    const u32 k = camSis.opEkle(tip);\n    camOperasyonPencereAc(k+});	99	200	.cpp	10:5[\x0a],32:49[ ],38:1[&],39:1['],40:5[(],41:4[)],44:1[,],45:13[-],46:1[.],47:4[/],50:1[2],51:1[3],58:2[:],59:2[;],61:3[=],65:4[A],67:4[C],69:2[E],73:1[I],77:1[M],79:2[O],80:1[P],83:1[S],84:2[T],91:1[[],93:1[]],97:20[a],98:1[b],99:11[c],100:4[d],101:19[e],103:2[g],105:13[i],107:6[k],108:9[l],109:8[m],110:13[n],111:8[o],112:8[p],114:14[r],115:9[s],116:14[t],117:4[u],121:1[y],122:1[z],123:1[{],220:1[\xdc],231:1[\xe7],246:1[\xf6],252:8[\xfc],287:3[\x11f],305:2[\x131]	52	295
2026-08-30T13:55:35.702Z	    "jspdf": "^2.5.2",	    "jspdf": "^4.2.1",	0.8636363636363636	38.360899999999674	0	1	0.7	false	    "jspdf": "^{-2.5.2-}{+4.2.1+}",	22	22	.json	46:4[.],49:1[1],50:3[2],52:1[4],53:1[5]	5	10
2026-08-30T14:05:36.476Z	    "typescript": "~5.8.3"	    "qrcode": "^1.5.4",\n    "rxjs": "~7.8.0"	0.3555555555555555	35.87669999990612	0	1	0.7	true	    "{-typescript": "~5.8.3-}{+qrcode": "^1.5.4",\n    "rxjs": "~7.8.0+}"	26	45	.json	10:1[\x0a],13:1[\x0d],32:7[ ],34:8["],44:1[,],46:6[.],48:1[0],49:1[1],51:1[3],52:1[4],53:2[5],55:1[7],56:2[8],58:3[:],94:1[^],99:2[c],100:1[d],101:2[e],105:1[i],106:1[j],111:1[o],112:2[p],113:1[q],114:3[r],115:2[s],116:2[t],120:1[x],121:1[y],126:2[~]	29	59
2026-08-30T14:23:09.225Z	import maplibregl from 'maplibre-gl';	import * as maplibregl from 'maplibre-gl';	0.8809523809523809	38.11130000001867	0	1	0.7	false	import {--}{+* as +}maplibregl from 'maplibre-gl';	37	42	.ts	32:2[ ],42:1[*],97:1[a],115:1[s]	4	5
2026-08-30T14:43:34.421Z	NzToolTipModule	$group: { _id: null	0.21052631578947367	40.41909999999916	0	2	0.7	true	{-NzToolTipModule-}{+$group: { _id: null+}	15	19	.ts	32:3[ ],36:1[$],58:2[:],77:1[M],78:1[N],84:2[T],95:1[_],100:2[d],101:1[e],103:1[g],105:2[i],108:4[l],110:1[n],111:4[o],112:2[p],114:1[r],117:3[u],122:1[z],123:1[{]	19	34
2026-09-13T23:37:00.747Z	2. `sanal_masaustu.hpp/.cpp` — ✅ YAZILDI VE DERLENDİ. Dokümante `IVirtualDesktopManager`\n   COM arayüzü (Windows 10 1607+ → Windows 11 dahil hepsinde var):\n   - `GetWindowDesktopId(hwnd)` → GUID (pencere hangi masaustunde)\n   - `IsWindowOnCurrentVirtualDesktop(hwnd)` → şu an görünüyor mu\n   Bunların ikisi de OS-agnostik, tek kod yolu Win10/11'de aynı çalışır.\n   Masaüstü OLUŞTURMA / TAŞIMA / GEÇİŞ için PUBLIC API YOK — yalnız\n   undocumented `IVirtualDesktopManagerInternal` / `IApplicationView` COM\n   arayüzleri var ve bunların IID/vtable sırası Windows build'ine göre\n   DEĞİŞIYOR (Win10 1809/1903/2004/20H2/21H2/22H2 farklı, Win11 21H2/22H2/\n   23H2/24H2 farklı). Faz 1'de bu fonksiyonlar STUB: her biri dürüstçe\n   `MasaustuDurum::HenuzUygulanmadi` döner — sahte başarı YOK. Faz 2'de\n   build-numarasına göre anahtarlanan bir IID tablosu ile eklenecek\n   (referans: açık kaynak VirtualDesktopAccessor/MScholtes.VirtualDesktop\n   projelerinin yayınladığı IID'ler — arayüz kimlikleri olgusaldır, telif\n   sorunu yok, ama KOPYALA-YAPIŞTIR yerine kendi implementasyonumuzu\n   yazacağız).	2. `sanal_masaustu.hpp/.cpp` — ✅ YAZILDI VE DERLENDİ. Dokümante `IVirtualDesktopManager`\n   COM arayüzü (Windows 10 1607+ → Windows 11 dahil hepsinde var):\n   - `GetWindowDesktopId(hwnd)` → GUID (pencere hangi masaüstünde)\n   - `IsWindowOnCurrentVirtualDesktop(hwnd)` → şu an görünüyor mu\n   Bunların ikisi de OS-agnostik, tek kod yolu Win10/11'de aynı çalışır.\n   Masaüstü OLUŞTURMA / TAŞIMA / GEÇİŞ için PUBLIC API YOK — yalnız\n   undocumented `IVirtualDesktopManagerInternal` / `IApplicationView` COM\n   arayüzleri var ve bunların IID/vtable sırası Windows build'ine göre\n   DEĞİŞİYOR (Win10 1809/1903/2004/20H2/21H2/22H2 farklı, Win11 21H2/22H2/\n   23H2/24H2 farklı). Faz 1'de bu fonksiyonlar STUB: her biri dürüstçe\n   `MasaustuDurum::HenuzUygulanmadi` döner — sahte başarı YOK. Faz 2'de\n   build-numarasına göre anahtarlanan bir IID tablosu ile eklenecek\n   (referans: açık kaynak VirtualDesktopAccessor/MScholtes.VirtualDesktop\n   projelerinin yayınladığı IID'ler — arayüz kimlikleri olgusaldır, telif\n   sorunu yok, ama KOPYALA-YAPIŞTIR yerine kendi implementasyonumuzu\n   yazacağız).	0.9972527472527473	596.4571999999462	0	1	0.7	false	2. `sanal_masaustu.hpp/.cpp` — ✅ YAZILDI VE DERLENDİ. Dokümante `IVirtualDesktopManager`\n   COM arayüzü (Windows 10 1607+ → Windows 11 dahil hepsinde var):\n   - `GetWindowDesktopId(hwnd)` → GUID (pencere hangi masa{-ustunde)\n   - `IsWindowOnCurrentVirtualDesktop(hwnd)` → şu an görünüyor mu\n   Bunların ikisi de OS-agnostik, tek kod yolu Win10/11'de aynı çalışır.\n   Masaüstü OLUŞTURMA / TAŞIMA / GEÇİŞ için PUBLIC API YOK — yalnız\n   undocumented `IVirtualDesktopManagerInternal` / `IApplicationView` COM\n   arayüzleri var ve bunların IID/vtable sırası Windows build'ine göre\n   DEĞİŞI-}{+üstünde)\n   - `IsWindowOnCurrentVirtualDesktop(hwnd)` → şu an görünüyor mu\n   Bunların ikisi de OS-agnostik, tek kod yolu Win10/11'de aynı çalışır.\n   Masaüstü OLUŞTURMA / TAŞIMA / GEÇİŞ için PUBLIC API YOK — yalnız\n   undocumented `IVirtualDesktopManagerInternal` / `IApplicationView` COM\n   arayüzleri var ve bunların IID/vtable sırası Windows build'ine göre\n   DEĞİŞİ+}YOR (Win10 1809/1903/2004/20H2/21H2/22H2 farklı, Win11 21H2/22H2/\n   23H2/24H2 farklı). Faz 1'de bu fonksiyonlar STUB: her biri dürüstçe\n   `MasaustuDurum::HenuzUygulanmadi` döner — sahte başarı YOK. Faz 2'de\n   build-numarasına göre anahtarlanan bir IID tablosu ile eklenecek\n   (referans: açık kaynak VirtualDesktopAccessor/MScholtes.VirtualDesktop\n   projelerinin yayınladığı IID'ler — arayüz kimlikleri olgusaldır, telif\n   sorunu yok, ama KOPYALA-YAPIŞTIR yerine kendi implementasyonumuzu\n   yazacağız).	1092	1092	.md	10:12[\x0a],32:112[ ],39:4['],40:2[(],41:4[)],44:2[,],45:4[-],46:2[.],47:10[/],48:2[0],49:6[1],65:10[A],66:4[B],67:6[C],68:8[D],69:4[E],71:2[G],73:19[I],75:2[K],76:4[L],77:10[M],79:10[O],80:4[P],82:2[R],83:2[S],84:4[T],85:6[U],86:6[V],87:6[W],89:2[Y],96:12[`],97:40[a],98:6[b],99:4[c],100:20[d],101:34[e],103:8[g],104:2[h],105:34[i],107:12[k],108:24[l],109:4[m],110:48[n],111:20[o],112:8[p],114:32[r],115:22[s],116:26[t],117:24[u],118:6[v],119:8[w],121:10[y],122:4[z],199:2[\xc7],231:4[\xe7],246:4[\xf6],252:12[\xfc],286:2[\x11e],304:5[\x130],305:16[\x131],350:8[\x15e],351:4[\x15f],8212:2[\x2014],8594:2[\x2192]	64	740
2026-09-14T06:53:06.617Z	// Zaten AÇIK olan bir CATIA oturumunu (g_guncel keşfinden gelen hwnd ile)\n// öne alır + kayıtlı olduğu sanal masaüstüne geçer. Yeni süreç BAŞLATMAZ —\n// oturumuAc()'ten farklı olarak yalnızca MEVCUT pencereyle ilgilenir.\n// DÜRÜST SINIR: SetForegroundWindow, Windows'un "foreground lock" kısıtı\n// yüzünden bazı durumlarda (örn. fikocad.exe şu an odakta değilse) sessizce\n// başarısız olabilir — bu API'nin kendi belgelenmiş davranışı, burada ekstra\n// bir hile (AttachThreadInput vb.) uygulanmadı.\nvoid oturumuAktifEt(const CatiaOturumBilgi& g) {\n  if (!g.hwnd) {\n    logEkle("❌ \"" + g.pencereBasligi + "\": pencere kimliği (HWND) yok, aktif edilemiyor");\n    return;\n  }\n  HWND h = static_cast<HWND>(g.hwnd);\n  if (!IsWindow(h)) {\n    logEkle("❌ \"" + g.pencereBasligi +\n            "\": pencere artık geçerli değil (kapatılmış olabilir) — \"🔄 Şimdi Yeniden "\n            "Keşfet\" ile listeyi tazele");\n    return;\n  }\n\n  std::string hedefGuid;\n  MasaustuDurum d = pencereMasaustuGetir(h, hedefGuid);\n  if (d == MasaustuDurum::Ok && !hedefGuid.empty()) {\n    MasaustuDurum d2 = masaustunaGec(hedefGuid);\n    if (d2 != MasaustuDurum::Ok)\n      logEkle("⚠ \"" + g.pencereBasligi + "\": kayıtlı masaüstüne geçilemedi (" +\n              masaustuDurumMetni(d2) + ") — yine de pencere öne alınmaya deneniyor");\n  } else {\n    logEkle("⚠ \"" + g.pencereBasligi + "\": pencerenin masaüstü tespit edilemedi (" +\n            masaustuDurumMetni(d) + ") — yalnız öne alınıyor, masaüstü değişmeyebilir");\n  }\n\n  if (IsIconic(h)) ShowWindow(h, SW_RESTORE);\n  const BOOL ok = SetForegroundWindow(h);\n  if (ok)\n    logEkle("🔼 \"" + g.pencereBasligi + "\" öne alındı");\n  else\n    logEkle("⚠ \"" + g.pencereBasligi +\n            "\": SetForegroundWindow reddetti (Windows'un odak kilidi kısıtı — fikocad.exe şu "\n            "an odakta değilse beklenir bir durum, pencereyi görev çubuğundan elle tıkla)");\n}\n\nvoid planiFarkliKaydet() {	 = po.masaustuGuid;\n  std::thread([pid, seciliYollar, baslikKopya, surecTutamagi, masaustuKip, masaustuGuid]() {\n    ComOturum com;  // bu thread'e ÖZEL COM apartment — ana UI thread'inden ayrı\n    if (!com.basariliMi()) {\n      logEkle("❌ \"" + baslikKopya + "\": arka plan iş parçacığında COM başlatılamadı");\n      CloseHandle(surecTutamagi);\n      return;\n    }\n    void* uygulama = nullptr;\n    const int denemeSayisi = 30;  // 30 * 1500 ms ≈ 45 sn azami bekleme\n    for (int i = 0; i < denemeSayisi && !uygulama; ++i) {\n      Sleep(1500);\n      DWORD kod = 0;\n      if (GetExitCodeProcess(surecTutamagi, &kod) && kod != STILL_ACTIVE) {\n        logEkle("❌ \"" + baslikKopya + "\": CATIA süreci COM hazır olmadan kapandı");\n        CloseHandle(surecTutamagi);\n        return;\n      }\n      uygulama = catiaUygulamasiPidIle(pid);\n    }\n    if (!uygulama) {\n      logEkle("❌ \"" + baslikKopya + "\": ~45 sn içinde COM arayüzü hazır olmadı — belgeler "\n                                      "açılamadı (CATIA hâlâ yükleniyor olabilir, elle deneyin)");\n      CloseHandle(surecTutamagi);\n      return;\n    }\n\n    // Faz 2 — sanal masaüstü yerleştirme (COM hazır olduysa pencere de hazırdır).\n    if (masaustuKip == 1) {\n      // "Şu anki masaüstü": hiçbir şey yapma — yeni pencere zaten aktif masaüstünde açılır.\n    } else if (masaustuKip == 0 && masaustuGuid.empty()) {\n      logEkle("ℹ \"" + baslikKopya + "\": planda kayıtlı masaüstü bilgisi yok — şu anki "\n                                      "masaüstünde kalıyor");\n    } else {\n      void* hwnd = catiaPencereBulPidIle(pid);\n      if (!hwnd) {\n        logEkle("⚠ \"" + baslikKopya +\n                "\": masaüstü yerleştirme için pencere bulunamadı — CATIA şu anki masaüstünde "\n                "kaldı");\n      } else if (masaustuKip == 2) {\n        std::string yeniGuid;\n        MasaustuDurum d = masaustuOlustur(yeniGuid);\n        if (d != MasaustuDurum::Ok) {\n          logEkle("❌ \"" + baslikKopya + "\": yeni masaüstü oluşturulamadı — " +\n                  masaustuDurumMetni(d));\n        } else {\n          MasaustuDurum d2 = pencereyiMasaustunaTasi(hwnd, yeniGuid);\n          if (d2 == MasaustuDurum::Ok)\n            logEkle("✅ \"" + baslikKopya + "\": yeni masaüstüne taşındı (" + yeniGuid + ")");\n          else\n            logEkle("❌ \"" + baslikKopya + "\": yeni masaüstü oluştu (" + yeniGuid +\n                    ") ama pencere taşınamadı — " + masaustuDurumMetni(d2));\n        }\n      } else {  // masaustuKip == 0, guid dolu\n        MasaustuDurum d = pencereyiMasaustunaTasi(hwnd, masaustuGuid);\n        if (d == MasaustuDurum::Ok) {\n          logEkle("✅ \"" + baslikKopya + "\": kayıtlı masaüstüne taşındı");\n        } else {\n          logEkle("❌ \"" + baslikKopya + "\": kayıtlı masaüstüne (" + masaustuGuid +\n                  ") taşınamadı — " + masaustuDurumMetni(d) +\n                  " (masaüstü artık mevcut olmayabilir — CATIA şu anki masaüstünde kaldı)");\n        }\n      }\n    }\n\n    if (seciliYollar.empty()) {\n      logEkle("✅ \"" + baslikKopya + "\": COM bağlantısı kuruldu (açılacak belge seçilmemiş)");\n    } else {\n      logEkle("✅ \"" + baslikKopya + "\": COM bağlantısı kuruldu, " +\n              std::to_string(seciliYollar.size()) + " belge açılıyor…");\n      int basarili = 0;\n      for (auto& yol : seciliYollar) {\n        std::string hata;\n        if (catiaBelgeAc(uygulama, yol, hata)) {\n          ++basarili;\n          logEkle("  ✅ açıldı: " + yol);\n        } else {\n          logEkle("  ❌ açılamadı: " + yol + " — " + hata);\n        }\n      }\n      logEkle("\"" + baslikKopya + "\": " + std::to_string(basarili) + "/" +\n              std::to_string(seciliYollar.size()) + " belge açıldı");\n    }\n    reinterpret_cast<IUnknown*>(uygulama)->Release();\n    CloseHandle(surecTutamagi);\n  }).detach();\n}\n\nvoid planiFarkliKaydet() {	0.25450744708649076	272.0755999982357	0	1	0.7	true	{-// Zaten AÇIK olan bir CATIA oturumunu (g_guncel keşfinden gelen hwnd ile)\n// öne alır + kayıtlı olduğu sanal masaüstüne geçer. Yeni süreç BAŞLATMAZ —\n// oturumuAc()'ten farklı olarak yalnızca MEVCUT pencereyle ilgilenir.\n// DÜRÜST SINIR: SetForegroundWindow, Windows'un "foreground lock" kısıtı\n// yüzünden bazı durumlarda (örn. fikocad.exe şu an odakta değilse) sessizce\n// başarısız olabilir — bu API'nin kendi belgelenmiş davranışı, burada ekstra\n// bir hile (AttachThreadInput vb.) uygulanmadı.\nvoid oturumuAktifEt(const CatiaOturumBilgi& g) {\n  if (!g.hwnd) {\n    logEkle("❌ \"" + g.pencereBasligi + "\": pencere kimliği (HWND) yok, aktif edilemiyor");\n    return;\n  }\n  HWND h = static_cast<HWND>(g.hwnd);\n  if (!IsWindow(h)) {\n    logEkle("❌ \"" + g.pencereBasligi +\n            "\": pencere artık geçerli değil (kapatılmış olabilir) — \"🔄 Şimdi Yeniden "\n            "Keşfet\" ile listeyi tazele");\n    return;\n  }\n\n  std::string hedefGuid;\n  MasaustuDurum d = pencereMasaustuGetir(h, hedefGuid);\n  if (d == MasaustuDurum::Ok && !hedefGuid.empty()) {\n    MasaustuDurum d2 = masaustunaGec(hedefGuid);\n    if (d2 != MasaustuDurum::Ok)\n      logEkle("⚠ \"" + g.pencereBasligi + "\": kayıtlı masaüstüne geçilemedi (" +\n              masaustuDurumMetni(d2) + ") — yine de pencere öne alınmaya deneniyor");\n  } else {\n    logEkle("⚠ \"" + g.pencereBasligi + "\": pencerenin masaüstü tespit edilemedi (" +\n            masaustuDurumMetni(d) + ") — yalnız öne alınıyor, masaüstü değişmeyebilir");\n  }\n\n  if (IsIconic(h)) ShowWindow(h, SW_RESTORE);\n  const BOOL ok = SetForegroundWindow(h);\n  if (ok)\n    logEkle("🔼 \"" + g.pencereBasligi + "\" öne alındı");\n  else\n    logEkle("⚠ \"" + g.pencereBasligi +\n            "\": SetForegroundWindow reddetti (Windows'un odak kilidi kısıtı — fikocad.exe şu "\n            "an odakta değilse beklenir bir durum, pencereyi görev çubuğundan elle tıkla)"-}{+ = po.masaustuGuid;\n  std::thread([pid, seciliYollar, baslikKopya, surecTutamagi, masaustuKip, masaustuGuid]() {\n    ComOturum com;  // bu thread'e ÖZEL COM apartment — ana UI thread'inden ayrı\n    if (!com.basariliMi()) {\n      logEkle("❌ \"" + baslikKopya + "\": arka plan iş parçacığında COM başlatılamadı");\n      CloseHandle(surecTutamagi);\n      return;\n    }\n    void* uygulama = nullptr;\n    const int denemeSayisi = 30;  // 30 * 1500 ms ≈ 45 sn azami bekleme\n    for (int i = 0; i < denemeSayisi && !uygulama; ++i) {\n      Sleep(1500);\n      DWORD kod = 0;\n      if (GetExitCodeProcess(surecTutamagi, &kod) && kod != STILL_ACTIVE) {\n        logEkle("❌ \"" + baslikKopya + "\": CATIA süreci COM hazır olmadan kapandı");\n        CloseHandle(surecTutamagi);\n        return;\n      }\n      uygulama = catiaUygulamasiPidIle(pid);\n    }\n    if (!uygulama) {\n      logEkle("❌ \"" + baslikKopya + "\": ~45 sn içinde COM arayüzü hazır olmadı — belgeler "\n                                      "açılamadı (CATIA hâlâ yükleniyor olabilir, elle deneyin)");\n      CloseHandle(surecTutamagi);\n      return;\n    }\n\n    // Faz 2 — sanal masaüstü yerleştirme (COM hazır olduysa pencere de hazırdır).\n    if (masaustuKip == 1) {\n      // "Şu anki masaüstü": hiçbir şey yapma — yeni pencere zaten aktif masaüstünde açılır.\n    } else if (masaustuKip == 0 && masaustuGuid.empty()) {\n      logEkle("ℹ \"" + baslikKopya + "\": planda kayıtlı masaüstü bilgisi yok — şu anki "\n                                      "masaüstünde kalıyor");\n    } else {\n      void* hwnd = catiaPencereBulPidIle(pid);\n      if (!hwnd) {\n        logEkle("⚠ \"" + baslikKopya +\n                "\": masaüstü yerleştirme için pencere bulunamadı — CATIA şu anki masaüstünde "\n                "kaldı");\n      } else if (masaustuKip == 2) {\n        std::string yeniGuid;\n        MasaustuDurum d = masaustuOlustur(yeniGuid);\n        if (d != MasaustuDurum::Ok) {\n          logEkle("❌ \"" + baslikKopya + "\": yeni masaüstü oluşturulamadı — " +\n                  masaustuDurumMetni(d));\n        } else {\n          MasaustuDurum d2 = pencereyiMasaustunaTasi(hwnd, yeniGuid);\n          if (d2 == MasaustuDurum::Ok)\n            logEkle("✅ \"" + baslikKopya + "\": yeni masaüstüne taşındı (" + yeniGuid + ")");\n          else\n            logEkle("❌ \"" + baslikKopya + "\": yeni masaüstü oluştu (" + yeniGuid +\n                    ") ama pencere taşınamadı — " + masaustuDurumMetni(d2));\n        }\n      } else {  // masaustuKip == 0, guid dolu\n        MasaustuDurum d = pencereyiMasaustunaTasi(hwnd, masaustuGuid);\n        if (d == MasaustuDurum::Ok) {\n          logEkle("✅ \"" + baslikKopya + "\": kayıtlı masaüstüne taşındı");\n        } else {\n          logEkle("❌ \"" + baslikKopya + "\": kayıtlı masaüstüne (" + masaustuGuid +\n                  ") taşınamadı — " + masaustuDurumMetni(d) +\n                  " (masaüstü artık mevcut olmayabilir — CATIA şu anki masaüstünde kaldı)");\n        }\n      }\n    }\n\n    if (seciliYollar.empty()) {\n      logEkle("✅ \"" + baslikKopya + "\": COM bağlantısı kuruldu (açılacak belge seçilmemiş)");\n    } else {\n      logEkle("✅ \"" + baslikKopya + "\": COM bağlantısı kuruldu, " +\n              std::to_string(seciliYollar.size()) + " belge açılıyor…");\n      int basarili = 0;\n      for (auto& yol : seciliYollar) {\n        std::string hata;\n        if (catiaBelgeAc(uygulama, yol, hata)) {\n          ++basarili;\n          logEkle("  ✅ açıldı: " + yol);\n        } else {\n          logEkle("  ❌ açılamadı: " + yol + " — " + hata);\n        }\n      }\n      logEkle("\"" + baslikKopya + "\": " + std::to_string(basarili) + "/" +\n              std::to_string(seciliYollar.size()) + " belge açıldı");\n    }\n    reinterpret_cast<IUnknown*>(uygulama)->Release();\n    CloseHandle(surecTutamagi);\n  }).detach(+});\n}\n\nvoid planiFarkliKaydet() {	1925	3827	.cpp	10:124[\x0a],32:1405[ ],33:10[!],34:154["],38:11[&],39:6['],40:96[(],41:94[)],42:4[*],43:67[+],44:20[,],45:1[-],46:25[.],47:25[/],48:11[0],49:3[1],50:8[2],51:2[3],52:2[4],53:4[5],58:47[:],59:53[;],60:3[<],61:32[=],62:3[>],65:20[A],66:11[B],67:21[C],68:21[D],69:28[E],70:4[F],71:17[G],72:7[H],73:19[I],75:21[K],76:5[L],77:28[M],78:4[N],79:19[O],80:5[P],82:6[R],83:12[S],84:20[T],85:4[U],86:2[V],87:12[W],89:7[Y],90:3[Z],91:1[[],92:40[\],93:1[]],95:8[_],97:336[a],98:46[b],99:60[c],100:145[d],101:301[e],102:33[f],103:77[g],104:34[h],105:234[i],107:90[k],108:216[l],109:109[m],110:166[n],111:119[o],112:57[p],114:147[r],115:203[s],116:165[t],117:198[u],118:7[v],119:16[w],120:3[x],121:74[y],122:17[z],123:25[{],125:24[}],126:1[~],199:1[\xc7],214:1[\xd6],220:2[\xdc],226:2[\xe2],231:17[\xe7],246:6[\xf6],252:43[\xfc],287:10[\x11f],305:78[\x131],350:3[\x15e],351:24[\x15f],8212:17[\x2014],8230:1[\x2026],8505:1[\x2139],8776:1[\x2248],9888:4[\x26a0],9989:5[\x2705],10060:9[\x274c],55357:2[\xd83d],56580:1[\xdd04],56636:1[\xdd3c]	100	5688
2026-09-18T05:58:48.531Z	HENÜZ KOD TARAFINDA BindMoniker YOLU YAZILMADI — önce ROT moniker\nşekillerinin gerçek çıktısını görmek gerekiyor, körlemesine yazılmayacak.	HENÜZ KOD TARAFINDA BindMoniker YOLU YAZILMADI — önce ROT moniker\nşekillerinin gerçek çıktısını görmek gerekiyor, körlemesine yazılmayacak.	0.9928571428571429	48.729199999943376	0	1	0.7	false	HENÜZ KOD TARAFINDA BindMoniker YOLU YAZILMADI — önce ROT moniker{--}{++}\nşekillerinin gerçek çıktısını görmek gerekiyor, körlemesine yazılmayacak.	139	140	.md	13:1[\x0d]	1	1
2026-09-18T05:59:14.272Z	HENÜZ KOD TARAFINDA BindMoniker YOLU YAZILMADI — önce ROT moniker\nşekillerinin gerçek çıktısını görmek gerekiyor, körlemesine yazılmayacak.\n	HENÜZ KOD TARAFINDA BindMoniker YOLU YAZILMADI — önce ROT moniker\nşekillerinin gerçek çıktısını görmek gerekiyor, körlemesine yazılmayacak.\n	0.9859154929577465	41.27170000015758	0	1	0.7	false	HENÜZ KOD TARAFINDA BindMoniker YOLU YAZILMADI — önce ROT moniker{-\nşekillerinin gerçek çıktısını görmek gerekiyor, körlemesine yazılmayacak.-}{+\nşekillerinin gerçek çıktısını görmek gerekiyor, körlemesine yazılmayacak.+}\n	140	142	.md	10:2[\x0a],13:2[\x0d],32:12[ ],44:2[,],46:2[.],97:8[a],99:2[c],101:20[e],103:6[g],105:10[i],107:14[k],108:8[l],109:6[m],110:8[n],111:2[o],114:12[r],115:4[s],116:2[t],121:6[y],122:2[z],231:4[\xe7],246:4[\xf6],305:10[\x131],351:2[\x15f]	24	150
2026-09-20T14:21:10.368Z	  if (ms == 0) return 'Kapalı';\n  if (ms % 1000 == 0) return '${ms ~/ 1000} sn';\n  return '${(ms / 1000).toStringAsFixed(1)} sn';\n}\n}	  if (ms == 0) return 'Kapalı';\n    if (ms % 1000 == 0) return '${ms ~/ 1000} sn';\n    return '${(ms / 1000).toStringAsFixed(1)} sn';\n  }\n}	0.9568345323741008	67.52730000001611	0	1	0.7	false	  if (ms == 0) return 'Kapalı';\n  {-if (ms % 1000 == 0) return '${ms ~/ 1000} sn';\n  return '${(ms / 1000).toStringAsFixed(1)} sn';\n-}{+  if (ms % 1000 == 0) return '${ms ~/ 1000} sn';\n    return '${(ms / 1000).toStringAsFixed(1)} sn';\n  +}}\n}	133	139	.dart	10:4[\x0a],32:38[ ],36:4[$],37:2[%],39:8['],40:6[(],41:6[)],46:2[.],47:4[/],48:20[0],49:8[1],59:4[;],61:4[=],65:2[A],70:2[F],83:2[S],100:2[d],101:6[e],102:2[f],103:2[g],105:6[i],109:6[m],110:10[n],111:2[o],114:10[r],115:12[s],116:8[t],117:4[u],120:2[x],123:4[{],125:4[}],126:2[~]	32	198
2026-09-20T14:54:24.459Z	\nimport 'package:flutter/services.dart';\n\n/// Native (Windows runner) köprüsü.	niden deneriz.\n    }\n  }\n\n  /// Masaüstünde (tray'in üstünde) kısa bir toast bildirimi gösterir.\n  /// Native Win32 penceresi — Flutter engine'i meşgul etmez.	0.2215189873417721	40.76080000004731	0	1	0.7	true	{-\nimport 'package:flutter/services.dart';\n\n/// Native (Windows runner) köprüsü-}{+niden deneriz.\n    }\n  }\n\n  /// Masaüstünde (tray'in üstünde) kısa bir toast bildirimi gösterir.\n  /// Native Win32 penceresi — Flutter engine'i meşgul etmez+}.	78	158	.dart	10:8[\x0a],32:32[ ],39:4['],40:2[(],41:2[)],46:3[.],47:10[/],50:1[2],51:1[3],58:1[:],59:1[;],70:1[F],77:1[M],78:2[N],87:2[W],97:10[a],98:2[b],99:3[c],100:7[d],101:22[e],102:1[f],103:4[g],105:18[i],107:3[k],108:4[l],109:4[m],110:13[n],111:3[o],112:4[p],114:15[r],115:11[s],116:15[t],117:4[u],118:3[v],119:1[w],121:1[y],122:2[z],125:2[}],246:2[\xf6],252:6[\xfc],305:1[\x131],351:1[\x15f],8212:1[\x2014]	43	234
2026-09-21T07:58:47.401Z	    return MaterialApp(\n      title: 'FikoCATIA - $title',\n      debugShowCheckedModeBanner: false,\n      theme: AppTheme.dark,\n      home: DetailWindowScreen(\n        windowId: windowId,\n        title: title,\n        instanceId: instanceId,\n      ),\n    );	    return MaterialApp(\n      title: 'FikoCATIA — $title',\n      debugShowCheckedModeBanner: false,\n      theme: AppTheme.dark,\n      home: DetailWindowScreen(\n        windowId: windowId,\n        title: title,\n        instanceId: instanceId,\n      ),\n    );	0.9624060150375939	54.78419999987818	0	1	0.7	false	    return MaterialApp({-\n      title: 'FikoCATIA - $title',\n      debugShowCheckedModeBanner: false,\n      theme: AppTheme.dark,\n      home: DetailWindowScreen(\n        windowId: windowId,\n        title: title,\n        instanceId: instanceId,\n      ),-}{+\n      title: 'FikoCATIA — $title',\n      debugShowCheckedModeBanner: false,\n      theme: AppTheme.dark,\n      home: DetailWindowScreen(\n        windowId: windowId,\n        title: title,\n        instanceId: instanceId,\n      ),+}\n    );	257	266	.dart	10:16[\x0a],13:9[\x0d],32:126[ ],36:2[$],39:4['],40:2[(],41:2[)],44:14[,],45:1[-],46:2[.],58:14[:],65:6[A],66:2[B],67:4[C],68:2[D],70:2[F],73:10[I],77:2[M],83:4[S],84:4[T],87:2[W],97:12[a],98:2[b],99:8[c],100:22[d],101:40[e],102:2[f],103:2[g],104:10[h],105:22[i],107:6[k],108:12[l],109:6[m],110:20[n],111:14[o],112:4[p],114:6[r],115:6[s],116:24[t],117:2[u],119:12[w],8212:1[\x2014]	42	463
2026-09-22T03:22:41.889Z	/// Aktif liste sıralaması (Görünüm ▸ ↕ Sırala ya da\n/// toolbar'daki ↕ çipiyle değiştirilir; ayarlarla birlikte DİSKE yazılır\n/// (uygulama yeniden açıldığında aynı sıralama geçerli olur).\nenum InstanceSort {	/// CATIA listesinin (Aktif sekmesi) sıralaması. Görünüm ▸ ↕ Sırala ya da\n/// toolbar'daki ↕ çipiyle değiştirilir; ayarlarla birlikte DİSKE yazılır\n/// (uygulama yeniden açıldığında aynı sıralama geçerli olur).\nenum InstanceSort {	0.8826086956521739	57.672200000000885	0	1	0.7	false	/// {-Aktif liste sıralaması (-}{+CATIA listesinin (Aktif sekmesi) sıralaması. +}Görünüm ▸ ↕ Sırala ya da\n/// toolbar'daki ↕ çipiyle değiştirilir; ayarlarla birlikte DİSKE yazılır\n/// (uygulama yeniden açıldığında aynı sıralama geçerli olur).\nenum InstanceSort {	209	230	.dart	32:8[ ],40:2[(],41:1[)],46:1[.],65:4[A],67:1[C],73:1[I],84:1[T],97:6[a],101:4[e],102:2[f],105:7[i],107:3[k],108:4[l],109:3[m],110:2[n],114:2[r],115:9[s],116:4[t],305:4[\x131]	20	69
2026-09-22T12:15:28.654Z	placeholder_will_fail	stanceId);\n    if (i < 0) return;\n    final	0.16279069767441856	44.86420000000362	0	1	0.7	true	{-placeholder_will_fai-}{+stanceId);\n    if (i < 0) return;\n    fina+}l	21	43	.dart	10:2[\x0a],32:12[ ],40:1[(],41:2[)],48:1[0],59:2[;],60:1[<],73:1[I],95:2[_],97:4[a],99:2[c],100:2[d],101:4[e],102:3[f],104:1[h],105:5[i],108:4[l],110:3[n],111:1[o],112:1[p],114:3[r],115:1[s],116:2[t],117:1[u],119:1[w]	25	62
2026-09-23T01:47:42.647Z	    // ⚙️ Everything ayarları (torun pencere) - 'everything' önekiyle de\n    // BAŞLADIĞI için bu kontrol EverythingSearchWindowService'ten ÖNCE.\n    if (raw.startsWith(EverythingSettingsService.argsPrefix)) {\n      _log('multi_window branch: everythingSettings id=${windowController.windowId}');\n      unawaited(EverythingSettingsChildLink.init(windowController));\n      runApp(const EverythingSettingsApp());\n      return;\n    }\n    // 🔎 Everything (voidtools) dosya arama penceresi.\n    if (raw.startsWith(EverythingSearchWindowService.argsPrefix)) {\n      _log('multi_window branch: everything id=${windowController.windowId}');\n      unawaited(EverythingChildLink.init(windowController));\n      runApp(const EverythingSearchApp());\n      return;\n    }\n    final parsed = DetailWindowService.parseArgs(raw);	    // 🔌 Everything ayarları (torun pencere) — 'everything' önekiyle de\n    // BAŞLADIĞI için bu kontrol EverythingSearchWindowService'ten ÖNCE.\n    if (raw.startsWith(EverythingSettingsService.argsPrefix)) {\n      _log('multi_window branch: everythingSettings id=${windowController.windowId}');\n      unawaited(EverythingSettingsChildLink.init(windowController));\n      runApp(const EverythingSettingsApp());\n      return;\n    }\n    // 🔎 Everything (voidtools) dosya arama penceresi.\n    if (raw.startsWith(EverythingSearchWindowService.argsPrefix)) {\n      _log('multi_window branch: everything id=${windowController.windowId}');\n      unawaited(EverythingChildLink.init(windowController));\n      runApp(const EverythingSearchApp());\n      return;\n    }\n    final parsed = DetailWindowService.parseArgs(raw);	0.9963054187192119	309.06190000101924	0	1	0.7	false	    // {-⚙️ Everything ayarları (torun pencere) --}{+🔌 Everything ayarları (torun pencere) —+} 'everything' önekiyle de\n    // BAŞLADIĞI için bu kontrol EverythingSearchWindowService'ten ÖNCE.\n    if (raw.startsWith(EverythingSettingsService.argsPrefix)) {\n      _log('multi_window branch: everythingSettings id=${windowController.windowId}');\n      unawaited(EverythingSettingsChildLink.init(windowController));\n      runApp(const EverythingSettingsApp());\n      return;\n    }\n    // 🔎 Everything (voidtools) dosya arama penceresi.\n    if (raw.startsWith(EverythingSearchWindowService.argsPrefix)) {\n      _log('multi_window branch: everything id=${windowController.windowId}');\n      unawaited(EverythingChildLink.init(windowController));\n      runApp(const EverythingSearchApp());\n      return;\n    }\n    final parsed = DetailWindowService.parseArgs(raw);	812	812	.dart	32:10[ ],40:2[(],41:2[)],45:1[-],69:2[E],97:6[a],99:2[c],101:8[e],103:2[g],104:2[h],105:2[i],108:2[l],110:6[n],111:2[o],112:2[p],114:10[r],116:4[t],117:2[u],118:2[v],121:4[y],305:2[\x131],8212:1[\x2014],9881:1[\x2699],55357:1[\xd83d],56588:1[\xdd0c],65039:1[\xfe0f]	26	80
2026-09-23T02:45:33.106Z	  /// 🎯 Palet başlığındaki hedef alanı (sıradaki bağlı CATIA / otomatik mod).\n  static Future<void> Function()? onTargetCycle;	 başlığındaki 👁/🌐 düğmesi (showMode geçişi) — karar provider'da.\n  static Future<void> Function()? onShowModeToggle;\n\n  /// Palet başlığındaki 🎯 hedef alanı (sıradaki bağlı CATIA / otomatik mod).\n  static Future<void> Function()? onTargetCycle;	0.4900398406374502	65.6148000000976	0	1	0.7	true	 {- /// 🎯 Palet başlığındaki hedef alanı (sıradaki bağlı CATIA / otomatik mod).-}{+başlığındaki 👁/🌐 düğmesi (showMode geçişi) — karar provider'da.\n  static Future<void> Function()? onShowModeToggle;\n\n  /// Palet başlığındaki 🎯 hedef alanı (sıradaki bağlı CATIA / otomatik mod).+}\n  static Future<void> Function()? onTargetCycle;	127	251	.dart	10:3[\x0a],13:4[\x0d],32:37[ ],39:1['],40:4[(],41:4[)],46:3[.],47:9[/],59:1[;],60:1[<],62:1[>],63:1[?],65:4[A],67:2[C],70:2[F],73:2[I],77:2[M],80:2[P],83:1[S],84:3[T],97:24[a],98:5[b],99:2[c],100:15[d],101:13[e],102:2[f],103:3[g],104:4[h],105:14[i],107:8[k],108:10[l],109:5[m],110:8[n],111:15[o],112:1[p],114:7[r],115:5[s],116:10[t],117:3[u],118:2[v],119:2[w],231:1[\xe7],252:1[\xfc],287:6[\x11f],305:12[\x131],351:4[\x15f],8212:1[\x2014],55356:3[\xd83c],55357:1[\xd83d],56385:1[\xdc41],57104:1[\xdf10],57263:2[\xdfaf]	52	278
2026-09-28T22:44:36.174Z	bool uzakKomutMesajiIsle(Cekirdek& cekirdek, const std::string& json,\n                         std::string& cevapJson);\n}  // namespace fiko	bool uzakKomutMesajiIsle(Cekirdek& cekirdek, const std::string& json,\n                         std::string& cevapJson);\n}  // namespace fiko	0.9929078014184397	49.89449999999488	0	1	0.7	false	bool uzakKomutMesajiIsle(Cekirdek& cekirdek, const std::string& json,\n                         std::string& cevapJson);{--}{++}\n}  // namespace fiko	140	141	.hpp	13:1[\x0d]	1	1
2026-10-02T19:53:46.593Z	"type": "anyComponentStyle",\n              "maximumWarning": "4kB",	"type": "anyComponentStyle",\n                  "maximumWarning": "4kB",	0.9305555555555556	60.39409999991767	0	1	0.7	false	"type": "anyComponentStyle",{-\n-}{+\n    +}              "maximumWarning": "4kB",	67	72	.json	10:2[\x0a],13:1[\x0d],32:4[ ]	3	7
2026-10-04T10:48:02.148Z	- `FIKO_BOOTSTRAP_USER/PASSWORD` ve `FIKO_SESSION_TTL` config'de okunur ama `cmd/server`'a **bağlı değil**; oturum ömrü kod içi varsayılan (30 gün).\n- Araç politikaları `GrantStore`'da tutulur; kalıcılığı bu bölümün kapsamı dışındadır (yeniden başlatmada davranışı `ILERLEME.md`'de izlenir).\n	- `FIKO_BOOTSTRAP_USER/PASSWORD` ve `FIKO_SESSION_TTL` config'de okunur ama `cmd/server`'a **bağlı değil**; oturum ömrü kod içi varsayılan (30 gün).\n- Araç politikaları `GrantStore`'da tutulur; kalıcılığı bu bölümün kapsamı dışındadır (yeniden başlatmada davranışı `ILERLEME.md`'de izlenir).\n	1	88.01759999999194	0	1	0.7	false	- `FIKO_BOOTSTRAP_USER/PASSWORD` ve `FIKO_SESSION_TTL` config'de okunur ama `cmd/server`'a **bağlı değil**; oturum ömrü kod içi varsayılan (30 gün).\n- Araç politikaları `GrantStore`'da tutulur; kalıcılığı bu bölümün kapsamı dışındadır (yeniden başlatmada davranışı `ILERLEME.md`'de izlenir).\n{--}{++}	292	292	.md		0	0
2026-10-04T10:48:05.556Z	(30 gün).\n- Araç politikaları `GrantStore`'da tutulur; kalıcılığı bu bölümün kapsamı dışındadır (yeniden başlatmada davranışı `ILERLEME.md`'de izlenir).	(30 gün).\n- Araç politikaları `GrantStore`'da tutulur; kalıcılığı bu bölümün kapsamı dışındadır (yeniden başlatmada davranışı `ILERLEME.md`'de izlenir).	1	42.786800000001676	0	1	0.7	false	(30 gün).\n- Araç politikaları `GrantStore`'da tutulur; kalıcılığı bu bölümün kapsamı dışındadır (yeniden başlatmada davranışı `ILERLEME.md`'de izlenir).{--}{++}	152	152	.md		0	0
2026-10-05T02:22:44.532Z	"maximumWarning": "6kB",\n              "maximumError": "8kB"	"maximumWarning": "6kB",\n                  "maximumError": "8kB"	0.9375	62.233500000002095	0	1	0.7	false	"maximumWarning": "6kB",\n              {--}{+    +}"maximumError": "8kB"	60	64	.json	32:4[ ]	1	4
2026-10-12T03:11:42.235Z	    <div class="icerik-soru" style="padding:4px 2px;">\n        <div class="ui form">\n            <div class="field">\n                <label>Soru</label>\n                <textarea rows="2" placeholder="Sormak istediğin soruyu yaz..." [(ngModel)]="icerik.ek.soru.metin"></textarea>\n            </div>\n            <label>Cevap alanları (parametre sistemi)</label>\n            <parametre-hizli-ekle [mevcutIsimler]="soruIsimleri(icerik.ek)" (parametreEklendi)="soruParametreEkle(icerik.ek, $event)"></parametre-hizli-ekle>\n            @for (p of icerik.ek.parametreler; track p.ismi; let i = $index) {\n            <div style="display:flex;gap:6px;margin-bottom:6px;align-items:center;">\n                <span style="flex:1;">{{ p.baslik || p.ismi }} <small>({{ p.turu }})</small></span>\n                <button type="button" class="ui mini red basic icon button" (click)="soruParametreSil(icerik.ek, i)">\n                    <i class="trash icon" style="margin: 0;"></i>\n                </button>\n            </div>\n            }\n        </div>\n        <button type="button" class="ui mini red basic button" style="margin-top:8px;display:block;margin-left:auto;"\n                (click)="icerik.ek = undefined;CD.detectChanges();">Soruyu kaldır</button>\n    </div>	    <div class="icerik-soru" style="padding:4px 2px;">\n        <div class="ui form">\n            <div class="field">\n                <label>Soru</label>\n                <textarea rows="2" placeholder="Sormak istediğin soru..." [(ngModel)]="icerik.ek.soru.metin"></textarea>\n            </div>\n            <label>Cevap alanları (parametre sistemi)</label>\n            <parametre-hizli-ekle [mevcutIsimler]="soruIsimleri(icerik.ek)" (parametreEklendi)="soruParametreEkle(icerik.ek, $event)"></parametre-hizli-ekle>\n            @for (p of icerik.ek.parametreler; track p.ismi; let i = $index) {\n            <div style="display:flex;gap:6px;margin-bottom:6px;align-items:center;">\n                <span style="flex:1;">{{ p.baslik || p.ismi }} <small>({{ p.turu }})</small></span>\n                <button type="button" class="ui mini red basic icon button" (click)="soruParametreSil(icerik.ek, i)">\n                    <i class="trash icon" style="margin: 0;"></i>\n                </button>\n            </div>\n            }\n        </div>\n        <button type="button" class="ui mini red basic button" style="margin-top:8px;display:block;margin-left:auto;"\n                (click)="icerik.ek = undefined;CD.detectChanges();">Soruyu kaldır</button>\n    </div>	0.9952380952380953	962.4934000000358	0	1	0.7	false	    <div class="icerik-soru" style="padding:4px 2px;">\n        <div class="ui form">\n            <div class="field">\n                <label>Soru</label>\n                <textarea rows="2" placeholder="Sormak istediğin soru{-yu yaz-}{++}..." [(ngModel)]="icerik.ek.soru.metin"></textarea>\n            </div>\n            <label>Cevap alanları (parametre sistemi)</label>\n            <parametre-hizli-ekle [mevcutIsimler]="soruIsimleri(icerik.ek)" (parametreEklendi)="soruParametreEkle(icerik.ek, $event)"></parametre-hizli-ekle>\n            @for (p of icerik.ek.parametreler; track p.ismi; let i = $index) {\n            <div style="display:flex;gap:6px;margin-bottom:6px;align-items:center;">\n                <span style="flex:1;">{{ p.baslik || p.ismi }} <small>({{ p.turu }})</small></span>\n                <button type="button" class="ui mini red basic icon button" (click)="soruParametreSil(icerik.ek, i)">\n                    <i class="trash icon" style="margin: 0;"></i>\n                </button>\n            </div>\n            }\n        </div>\n        <button type="button" class="ui mini red basic button" style="margin-top:8px;display:block;margin-left:auto;"\n                (click)="icerik.ek = undefined;CD.detectChanges();">Soruyu kaldır</button>\n    </div>	1260	1254	.html	32:1[ ],97:1[a],117:1[u],121:2[y],122:1[z]	5	6
2026-10-12T18:06:31.275Z	\tiyi := "https://fikoyt.com/eklenti/ornek.exe"\n\tif err := izinliIndirmeAdresi(iyi); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tfor _, kotu := range []string{"http://fikoyt.com/a", "https://evil.com/a", "https://fikoyt.com.evil.com/a", "ftp://fikoyt.com/a"} {	\tiyi := "https://fikoyt.com/eklenti/ornek.exe"\n\tif err := izinliIndirmeAdresi(iyi); err != nil {\n\t\tt.Fatalf("izinli adres reddedildi: %v", err)\n\t}\n\tfor _, kotu := range []string{"http://fikoyt.com/a", "https://evil.com/a", "https://fikoyt.com.evil.com/a", "ftp://fikoyt.com/a"} {	0.8853046594982079	52.537800000049174	0	1	0.7	false	\tiyi := "https://fikoyt.com/eklenti/ornek.exe"\n\tif err := izinliIndirmeAdresi(iyi); err != nil {\n\t\tt.Fatal{-(-}{+f("izinli adres reddedildi: %v", +}err)\n\t}\n\tfor _, kotu := range []string{"http://fikoyt.com/a", "https://evil.com/a", "https://fikoyt.com.evil.com/a", "ftp://fikoyt.com/a"} {	247	279	.go	32:4[ ],34:2["],37:1[%],40:2[(],44:1[,],58:1[:],97:1[a],100:5[d],101:3[e],102:1[f],105:5[i],108:2[l],110:1[n],114:2[r],115:1[s],118:1[v],122:1[z]	17	34
2026-10-14T13:02:45.360Z	surum = "0.3.7"	surum = "0.3.8"	0.9333333333333333	60.68920000002254	0	1	0.7	false	surum = "0.3.{-7-}{+8+}"	15	15	.go	55:1[7],56:1[8]	2	2
2026-10-16T02:27:41.500Z	// Engel kararini kaldirir (izin verir). Sunucu yonetici token ister (X-Token).\nbool yonetimIzinVer(const CihazOzet& cihaz, const std::string& seri, const std::string& yoneticiToken, std::string& hata);	// Engel kararini kaldirir (izin verir). Sunucu yonetici token ister (X-Token).\nbool yonetimIzinVer(const CihazOzet& cihaz, const std::string& seri, const std::string& yoneticiToken, std::string& hata);	0.9950738916256158	47.721600000048056	0	1	0.7	false	// Engel kararini kaldirir (izin verir). Sunucu yonetici token ister (X-Token).{--}{++}\nbool yonetimIzinVer(const CihazOzet& cihaz, const std::string& seri, const std::string& yoneticiToken, std::string& hata);	202	203	.hpp	13:1[\x0d]	1	1
2026-10-16T02:27:46.766Z	// Engel kararini kaldirir (izin verir). Sunucu yonetici token ister (X-Token).\n// Seçili bilgisayarı engeller (engelli=true) veya iznini açar (engelli=false).	// Engel kararini kaldirir (izin verir). Sunucu yonetici token ister (X-Token).\n// Seçili bilgisayarı engeller (engelli=true) veya iznini açar (engelli=false).	0.99375	38.34340000001248	0	1	0.7	false	// Engel kararini kaldirir (izin verir). Sunucu yonetici token ister (X-Token).{--}{++}\n// Seçili bilgisayarı engeller (engelli=true) veya iznini açar (engelli=false).	159	160	.hpp	13:1[\x0d]	1	1
2026-10-16T15:20:25.654Z	func kuruluListeKopya() []kuruluDurum {\n\tkuruluMu.Lock()\n\tliste := kuruluListeAl(aktifProfilAnahtari())\n\tkopya := make([]kuruluDurum, 0, len(liste))\n\tfor _, k := range liste {\n\t\tkopya = append(kopya, kuruluDurum{Anahtar: k.Anahtar, Surum: k.Surum, Etkin: k.Etkin, Acilista: k.Acilista})\n\t}\n\tkuruluMu.Unlock()\n\tfor i := range kopya {\n\t\tkopya[i].Ayar = ayarGoster(kayitliAyar(kopya[i].Anahtar))\n\t\tkopya[i].Calisiyor = ekSurecCalisiyor(kopya[i].Anahtar)\n\t}\n\treturn kopya\n}\n	func kuruluListeKopya() []kuruluDurum {\n\tkuruluMu.Lock()\n\tliste := kuruluListeAl(aktifProfilAnahtari())\n\tkopya := make([]kuruluDurum, 0, len(liste))\n\tfor _, k := range liste {\n\t\tkopya = append(kopya, kuruluDurum{Anahtar: k.Anahtar, Surum: k.Surum, Etkin: k.Etkin, Acilista: k.Acilista})\n\t}\n\tkuruluMu.Unlock()\n\tfor i := range kopya {\n\t\tkopya[i].Ayar = ayarGoster(kayitliAyar(kopya[i].Anahtar))\n\t\tkopya[i].Calisiyor = ekSurecCalisiyor(kopya[i].Anahtar)\n\t}\n\treturn kopya\n}\n	0.9978768577494692	101.29300000000512	0	1	0.7	false	func kuruluListeKopya() []kuruluDurum {\n\tkuruluMu.Lock()\n\tliste := kuruluListeAl(aktifProfilAnahtari()){--}{++}\n\tkopya := make([]kuruluDurum, 0, len(liste))\n\tfor _, k := range liste {\n\t\tkopya = append(kopya, kuruluDurum{Anahtar: k.Anahtar, Surum: k.Surum, Etkin: k.Etkin, Acilista: k.Acilista})\n\t}\n\tkuruluMu.Unlock()\n\tfor i := range kopya {\n\t\tkopya[i].Ayar = ayarGoster(kayitliAyar(kopya[i].Anahtar))\n\t\tkopya[i].Calisiyor = ekSurecCalisiyor(kopya[i].Anahtar)\n\t}\n\treturn kopya\n}\n	470	471	.go	13:1[\x0d]	1	1
2026-10-16T21:02:59.869Z	// korumali: her korunan uc icin X-Bridge-Token zorunlu. Token bir profilin onayli eslesmesine aittir.\n// Istek, tokenin sahibi profil etkin hesaplar kumesindeyse kabul edilir (coklu hesap); aktif profil\n// olmasi gerekmez. Istegin profili profilDe(r) ile belirlenir; korunan isleyiciler bunu kullanmalidir.\n// Profil secilmemisken (tek hesap donemi) kok klasordeki eslesmeler kullanilir.\nfunc korumali(h http.HandlerFunc) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\ttoken := r.Header.Get("X-Bridge-Token")\n\t\tif sahip, ok := tokenProfili(token); ok {\n\t\t\tif !etkinMi(sahip) {\n\t\t\t\thttp.Error(w, "bu hesap etkin de\u011Fil; \u00F6nce hesab\u0131 etkinle\u015Ftirin", http.StatusConflict)\n\t\t\t\treturn\n\t\t\t}\n\t\t\th(w, profilBaglam(r, sahip))\n\t\t\treturn\n\t\t}\n\t\tif aktifProfilAnahtari() == "" && eslesmisTokenMi(token) {\n\t\t\th(w, r)\n\t\t\treturn\n\t\t}\n\t\thttp.Error(w, "yetkisiz", http.StatusUnauthorized)\n\t}\n}	// korumali: her korunan uc icin X-Bridge-Token zorunlu. Token bir profilin onayli eslesmesine aittir.\n// Istek, tokenin sahibi profil etkin hesaplar kumesindeyse kabul edilir (coklu hesap); aktif profil\n// olmasi gerekmez. Istegin profili profilDe(r) ile belirlenir; korunan isleyiciler bunu kullanmalidir.\n// Profil secilmemisken (tek hesap donemi) kok klasordeki eslesmeler kullanilir.\nfunc korumali(h http.HandlerFunc) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\ttoken := r.Header.Get("X-Bridge-Token")\n\t\tif sahip, ok := tokenProfili(token); ok {\n\t\t\tif !etkinMi(sahip) {\n\t\t\t\thttp.Error(w, "bu hesap etkin değil; önce hesabı etkinleştirin", http.StatusConflict)\n\t\t\t\treturn\n\t\t\t}\n\t\t\th(w, profilBaglam(r, sahip))\n\t\t\treturn\n\t\t}\n\t\tif aktifProfilAnahtari() == "" && eslesmisTokenMi(token) {\n\t\t\th(w, r)\n\t\t\treturn\n\t\t}\n\t\thttp.Error(w, "yetkisiz", http.StatusUnauthorized)\n\t}\n}	0.9739696312364425	447.3554000000004	0	1	0.7	false	// korumali: her korunan uc icin X-Bridge-Token zorunlu. Token bir profilin onayli eslesmesine aittir.\n// Istek, tokenin sahibi profil etkin hesaplar kumesindeyse kabul edilir (coklu hesap); aktif profil\n// olmasi gerekmez. Istegin profili profilDe(r) ile belirlenir; korunan isleyiciler bunu kullanmalidir.\n// Profil secilmemisken (tek hesap donemi) kok klasordeki eslesmeler kullanilir.\nfunc korumali(h http.HandlerFunc) http.HandlerFunc {\n\treturn func(w http.ResponseWriter, r *http.Request) {\n\t\ttoken := r.Header.Get("X-Bridge-Token")\n\t\tif sahip, ok := tokenProfili(token); ok {\n\t\t\tif !etkinMi(sahip) {\n\t\t\t\thttp.Error(w, "bu hesap etkin de{-\u011Fil; \u00F6nce hesab\u0131 etkinle\u015F-}{+ğil; önce hesabı etkinleş+}tirin", http.StatusConflict)\n\t\t\t\treturn\n\t\t\t}\n\t\t\th(w, profilBaglam(r, sahip))\n\t\t\treturn\n\t\t}\n\t\tif aktifProfilAnahtari() == "" && eslesmisTokenMi(token) {\n\t\t\th(w, r)\n\t\t\treturn\n\t\t}\n\t\thttp.Error(w, "yetkisiz", http.StatusUnauthorized)\n\t}\n}	922	902	.go	32:6[ ],48:5[0],49:5[1],51:1[3],53:1[5],54:1[6],59:2[;],70:3[F],92:4[\],97:2[a],98:2[b],99:2[c],101:8[e],104:2[h],105:4[i],107:2[k],108:4[l],110:4[n],115:2[s],116:2[t],117:4[u],246:1[\xf6],287:1[\x11f],305:1[\x131],351:1[\x15f]	25	70
2026-10-16T21:09:30.943Z	func fikoytCagri(uc string, veri map[string]any) (map[string]any, error) {\n\treturn fikoytCagriProfil(aktifProfilAnahtari(), uc, veri)\n}\n\n// fikoytCagriProfil: verilen profilin oturum cerezleriyle fikoyt.com cihaz ucuna istek atar.	f !ok {\n\t\t_, _ = fikoytCagriProfil(profil, "karar", map[string]any{"cihazKimlik": kimlik, "anahtar": anahtar, "izin": false})\n\t\treturn nil\n\t}\n\tif izinOkuProfil(profil).Acik(anahtar) {\n\t\t// Zaten acik; istegi kapat.\n\t\t_, err := fikoytCagriProfil(profil, "karar", map[string]any{"cihazKimlik": kimlik, "anahtar": anahtar, "izin": true})\n\t\treturn err\n\t}\n\n\tonay, sure, err := izinOnayla(anahtar, hesapBaslik(profil, etiket.baslik), etiket.aciklama)\n\tif errors.	0.2785087719298246	43.01780000003055	0	1	0.7	true	f{-unc fikoytCagri(uc string, veri map[string]any) (map[string]any, error) {\n\treturn fikoytCagriProfil(aktifProfilAnahtari(), uc, veri)\n}\n\n// fikoytCagriProfil: verilen profilin oturum cerezleriyle fikoyt.com cihaz ucuna istek atar-}{+ !ok {\n\t\t_, _ = fikoytCagriProfil(profil, "karar", map[string]any{"cihazKimlik": kimlik, "anahtar": anahtar, "izin": false})\n\t\treturn nil\n\t}\n\tif izinOkuProfil(profil).Acik(anahtar) {\n\t\t// Zaten acik; istegi kapat.\n\t\t_, err := fikoytCagriProfil(profil, "karar", map[string]any{"cihazKimlik": kimlik, "anahtar": anahtar, "izin": true})\n\t\treturn err\n\t}\n\n\tonay, sure, err := izinOnayla(anahtar, hesapBaslik(profil, etiket.baslik), etiket.aciklama)\n\tif errors+}.	230	456	.go	9:16[\x09],10:15[\x0a],32:58[ ],33:1[!],34:16["],40:10[(],41:10[)],44:19[,],46:5[.],47:4[/],58:9[:],59:1[;],61:3[=],65:2[A],66:1[B],67:5[C],75:2[K],79:2[O],80:6[P],90:1[Z],91:4[[],93:4[]],95:3[_],97:58[a],98:1[b],99:12[c],101:27[e],102:21[f],103:11[g],104:11[h],105:66[i],107:26[k],108:24[l],109:11[m],110:31[n],111:23[o],112:11[p],114:59[r],115:13[s],116:33[t],117:13[u],118:3[v],121:13[y],122:8[z],123:5[{],125:5[}]	46	682
2026-10-16T21:09:49.910Z	func kuruluEtkinMi(anahtar string) bool {\n\tkuruluMu.Lock()\n\tdefer kuruluMu.Unlock()\n\tfor _, k := range kuruluListeAl(aktifProfilAnahtari()) {\n\t\tif k.Anahtar == anahtar {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n	f liste[i].Anahtar == anahtar {\n\t\t\tliste[i].Acilista = acilista\n\t\t\treturn kuruluKaydetLocked(profil)\n\t\t}\n\t}\n\treturn errKuruluYok\n}\n\n// kuruluVarMi: aktif profilde kayit var mi (etkin olsun olmasin).\nfunc kuruluVarMi(anahtar string) bool {\n\tkuruluMu.Lock()\n\tdefer kuruluMu.Unlock()\n\tfor _, k := range kuruluListeAl(aktifProfilAnahtari()) {\n\t\tif k.Anahtar == anahtar {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n	0.5111111111111111	40.768400000059046	0	1	0.7	true	f{-unc kuruluEtkin-}{+ liste[i].Anahtar == anahtar {\n\t\t\tliste[i].Acilista = acilista\n\t\t\treturn kuruluKaydetLocked(profil)\n\t\t}\n\t}\n\treturn errKuruluYok\n}\n\n// kuruluVarMi: aktif profilde kayit var mi (etkin olsun olmasin).\nfunc kuruluVar+}Mi(anahtar string) bool {\n\tkuruluMu.Lock()\n\tdefer kuruluMu.Unlock()\n\tfor _, k := range kuruluListeAl(aktifProfilAnahtari()) {\n\t\tif k.Anahtar == anahtar {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n	208	405	.go	9:10[\x09],10:9[\x0a],32:19[ ],40:2[(],41:2[)],46:3[.],47:2[/],58:1[:],61:3[=],65:2[A],69:1[E],75:2[K],76:1[L],77:1[M],86:2[V],89:1[Y],91:2[[],93:2[]],97:15[a],99:5[c],100:3[d],101:9[e],102:4[f],104:2[h],105:17[i],107:10[k],108:13[l],109:2[m],110:10[n],111:6[o],112:2[p],114:18[r],115:6[s],116:13[t],117:20[u],118:1[v],121:2[y],123:1[{],125:3[}]	39	227
2026-10-16T21:13:19.339Z	\tk, err := oturumOku()\n\t// Web, k��prǬnǬn hangi hesaba ba�Yl�� oldu�Yunu gorup kendi oturumuyla karsilastirabilir.\n\tkullanici := ""\n\tif err == nil && k != nil {\n\t\tkullanici = k.KullaniciAdi\n\t}\n\tyazJSON(w, http.StatusOK, map[string]any{"ok": true, "surum": surum, "giris": err == nil, "kullanici": kullanici, "eslesme": len(eslesmeleriOku()) > 0})	\tk, err := oturumOku()\n\t// Web, köprünün hangi hesaba bağlı olduğunu gorup kendi oturumuyla karsilastirabilir.\n\tkullanici := ""\n\tif err == nil && k != nil {\n\t\tkullanici = k.KullaniciAdi\n\t}\n\tyazJSON(w, http.StatusOK, map[string]any{"ok": true, "surum": surum, "giris": err == nil, "kullanici": kullanici, "eslesme": len(eslesmeleriOku()) > 0})	0.9710982658959537	68.1933999999892	0	1	0.7	false	\tk, err := oturumOku()\n\t// Web, k{-��prǬnǬn hangi hesaba ba�Yl�� oldu�Y-}{+öprünün hangi hesaba bağlı olduğ+}unu gorup kendi oturumuyla karsilastirabilir.\n\tkullanici := ""\n\tif err == nil && k != nil {\n\t\tkullanici = k.KullaniciAdi\n\t}\n\tyazJSON(w, http.StatusOK, map[string]any{"ok": true, "surum": surum, "giris": err == nil, "kullanici": kullanici, "eslesme": len(eslesmeleriOku()) > 0})	346	342	.go	32:8[ ],89:2[Y],97:8[a],98:4[b],100:2[d],101:2[e],103:2[g],104:4[h],105:2[i],108:4[l],110:6[n],111:2[o],112:2[p],114:2[r],115:2[s],117:2[u],246:1[\xf6],252:2[\xfc],287:2[\x11f],305:1[\x131],492:2[\x1ec],65533:6[\xfffd]	22	68
