Mcp problemleri giderildi

This commit is contained in:
Sedat ÖZTÜRK 2026-10-09 17:01:18 +03:00
parent 4323e87572
commit 1e3c66913d
11 changed files with 115 additions and 41 deletions

View file

@ -525,7 +525,7 @@ alanlar wizard dosyasının `Fields` bölümünden) ve yalnızca `create_table`
| `delete_wizard` | Wizard'ı ve yalnızca onun ürettiği kayıtları siler; `dropTables: true` ekranın tablosunu da düşürür | Bağımlı wizard varsa reddeder. Tablo kullanıcı açıkça onaylamadan düşürülmez; `App.SqlQueryManager` ister (§4.5) |
| `start_dev_request` | `App.DevRequests` talebini üstlenir: `Ready to Start` durumundaysa `In Progress` durumuna alır, değilse reddeder | Ek olarak `App.DevRequests.Update` ister. Açıklamadaki görseller ayrı resim içeriği olarak gelir (§0.11) |
| `get_dev_request` | Talebi durumuna dokunmadan okur (aynı metin + analiz + resim içerikleri) | Analizden önce ya da yarım kalan talebe dönmek için; `App.DevRequests` ister |
| `save_dev_request_analysis` | `Backlog`/`Analysis` durumundaki talebin analizini `Analysis` kolonuna yazar (var olanı değiştirir), talebi `Analysis` durumuna alır; diğer durumları reddeder. Modül dokümanına yazmaz; doküman üretimde açılır (§0.13) | Ek olarak `App.DevRequests.Update` ister. Standart §0.12; `Description`'a dokunmaz |
| `save_dev_request_analysis` | `Backlog`/`Analysis` durumundaki talebin analizini `Analysis` kolonuna yazar (var olanı değiştirir); `productionReady: true` (Üretime hazır: Evet) talebi `Ready to Start`'a, `false` (şartlı/Hayır) `Analysis` durumuna alır; diğer durumları reddeder. Modül dokümanına yazmaz; doküman üretimde açılır (§0.13) | Ek olarak `App.DevRequests.Update` ister. Standart §0.12; `Description`'a dokunmaz |
| `append_dev_request_note` | Talebin `Analysis` kolonunun sonuna HTML ekler | Üretim sonuç notu için; `Description` ve `Analysis` `update_row` ile yazılmaz (§0.11) |
| `add_dev_request_subtasks` | `SubTasks` listesine tamamlanmış satırlar ekler | Atanan = bağlanan kullanıcı, bitiş = bugün (sunucu yazar); `SubTasks`'ı `update_row` ile yazma (§0.11) |
| `verify_wizard` | DB Migrate ile kurulmuş ekranı veri yazmadan doğrular (migrate bekleyen dosyada `install` kontrolü başarısız döner, diğerleri yapılmaz): menü, yetki tanımı, ekran sorgusu (List) ya da bileşen (Custom), seed kapanışı | İsteğe bağlı: kullanıcı migrate sonrası isterse. Talep döngüsünün (§0.11) adımı değildir. `passed` yalnızca engelleyici bir kontrol kalırsa `false` |
@ -581,7 +581,8 @@ kiracı bağlamında geliştirme araçları kapalıdır. Gereken yetkiler: `App.
`App.DeveloperKit.McpServers.Invoke` + `.Write` ve üretimin kendi yetkileri (§0.10).
Talep yaşam döngüsü: `Backlog` → **`Analysis`** (MCP analiz eder, §0.12) → `Ready to Start`
(analizi beğenen kullanıcı taşır; beğenmezse analiz yeniden yazılır ya da elle düzeltilir) →
(analiz "Üretime hazır: Evet" ise MCP doğrudan taşır; şartlı/Hayır analiz `Analysis`'te kalır,
kullanıcı onaylayıp taşır ya da analiz yeniden yazılır/elle düzeltilir) →
`In Progress` → `Testing` → `Staging`. Üretim `Ready to Start`'tan başlar ve talebin
`Description`'ı ile onaylanmış `Analysis`'i birlikte tarif sayılır.
@ -679,9 +680,10 @@ kiracıları dolaşır. Rapor bu adımı tek satırla belirtir.
### 0.12 Talep analizi — `Backlog` → `Analysis`
"Analiz et" dendiğinde `Backlog` talepleri üretimden önce analiz edilir; kullanıcı analizi okuyup
beğenirse talebi `Ready to Start`'a kendisi taşır, beğenmezse analiz değişir (MCP'ye yeniden
analiz ettirir ya da `Analysis` sekmesinde elle düzeltir). Analiz **üretim yapmaz**: tablo, wizard,
"Analiz et" dendiğinde `Backlog` talepleri üretimden önce analiz edilir. Analiz koşulsuz üretime
hazırsa (madde 11: **Evet**) talep doğrudan `Ready to Start`'a geçer; şartlı ya da **Hayır** ise
`Analysis`'te kalır — kullanıcı şartları onaylayıp kendisi taşır ya da analiz değişir (MCP'ye yeniden
analiz ettirir veya `Analysis` sekmesinde elle düzeltir). Analiz **üretim yapmaz**: tablo, wizard,
bileşen, seed dosyası yazılmaz; yalnızca okuma araçları ve `save_dev_request_analysis` kullanılır.
| Adım | Araç | Durum |
@ -689,11 +691,12 @@ bileşen, seed dosyası yazılmaz; yalnızca okuma araçları ve `save_dev_reque
| 1. Kuyruğu oku (yalnızca toplu) | `query_list` — `ListFormCode: App.DevRequests`, filtre `["Status","=","Backlog"]`, sıralama `SortOrder` | — |
| 2. Talebi oku | `get_dev_request` — metin + görseller | — |
| 3. Keşif | `list_wizards` (menü kökleri, modüller, izin grupları), `list_lists` / `describe_list` / `search_schema` (var olan ekran, tablo, lookup kaynağı), `list_components`, `get_dev_guide` (§0.6, §0.7, §0.8, §1) | — |
| 4. Yaz | `save_dev_request_analysis` — analizin tamamı, HTML. Modül dokümanına yazılmaz; dosya ve dal bölümü üretimde deploy ile açılır, analiz "2. Analiz ve kararlar" alt bölümüne üretimde `save_module_doc` ile taşınır (§0.13) (Timesheets satırını sunucu yazar, §0.11) | Analysis |
| 4. Yaz | `save_dev_request_analysis` — analizin tamamı, HTML, ve madde 11'le aynı `productionReady`. Modül dokümanına yazılmaz; dosya ve dal bölümü üretimde deploy ile açılır, analiz "2. Analiz ve kararlar" alt bölümüne üretimde `save_module_doc` ile taşınır (§0.13) (Timesheets satırını sunucu yazar, §0.11) | Evet → Ready to Start; şartlı/Hayır → Analysis |
**Durum kuralı sunucudadır:** araç yalnızca `Backlog` ya da `Analysis` durumundaki talebi kabul eder;
`Analysis`'teki talebe yeniden çağrılırsa analiz değiştirilir. `Ready to Start` ve sonrası
reddedilir. `Description`'a hiçbir koşulda yazılmaz.
reddedilir. Hedef durumu `productionReady` belirler (`true` → `Ready to Start`, `false` → `Analysis`);
model durumu `update_row` ile değiştirmez. `Description`'a hiçbir koşulda yazılmaz.
**Analiz standardı.** HTML, aşağıdaki başlıklar bu sırayla (`<h4>`), boş kalan başlık yazılmaz.
Kısa ve karar odaklı yaz; talebi tekrar anlatma.
@ -705,8 +708,9 @@ Kısa ve karar odaklı yaz; talebi tekrar anlatma.
- Talebin açıkça yazdığı şey (menü yolu, alan, kapsam) **girdidir**: değiştirilmez, daraltılmaz,
alternatifi sunulmaz.
- Talepte olmayan bilgi için analiz karar verir (**Kararlar**, madde 9). Tabloya yazma hedefi,
onaycı ve hesap formülü de boş bırakılmaz: somut karar **(onay)** etiketiyle yazılır; talebi
`Ready to Start`'a alan kullanıcı onları onaylamış olur.
onaycı ve hesap formülü de boş bırakılmaz: somut karar **(onay)** etiketiyle yazılır; **(onay)** taşıyan
analiz şartlıdır (madde 11), talep `Analysis`'te kalır ve onu `Ready to Start`'a alan kullanıcı
kararları onaylamış olur.
- Planın her adımının mevcut araçlarla (`create_table`, `deploy_wizard`, `save_component` ve
sözleşmeleri, §4.4) yapılabildiği keşifte doğrulanır (madde 11).
@ -823,9 +827,12 @@ Kısa ve karar odaklı yaz; talebi tekrar anlatma.
varsayılamayan konular **(onay)** etiketi taşır. "Açık sorular" başlığı yoktur.
10. **Üretim planı** — bağımlılık sırasıyla (tablo → lookup kaynağı ekran → en derindeki alt form → onu taşıyan alt form → ana ekran) sıralı artefakt listesi (`create_table: …`, `deploy_wizard: ….json`,
`save_component: …`); üretimdeki `add_dev_request_subtasks` başlıkları bununla aynı olur.
11. **Üretime hazır** — tek satır: **Evet**, ya da **Hayır — eksik yetenek: …** (çerçeve dışı
ihtiyaç, §0.8, adıyla). Talebi daraltan geçici çözüm önerilmez; "Hayır" taşıyan talep yetenek
eklenene kadar `Ready to Start`'a alınmaz.
11. **Üretime hazır** — tek satır: **Evet**, **Şartlı — …** (**(onay)** etiketli karar ya da
kullanıcının netleştirmesi gereken bir koşul, adıyla) ya da **Hayır — eksik yetenek: …** (çerçeve
dışı ihtiyaç, §0.8, adıyla). Talebi daraltan geçici çözüm önerilmez. Bu satır
`save_dev_request_analysis`'in `productionReady` değeridir: yalnızca **Evet** talebi
`Ready to Start`'a alır; **Şartlı** talep kullanıcı onaylayana, **Hayır** talep yetenek eklenene
kadar `Analysis`'te kalır.
### 0.12.1 Çalışan (persona) ekranları — Wizard ve MCP için
@ -942,7 +949,7 @@ Wizard dışı (entity, özel React) modüller bölümünü elle yazar.
| "Ana-detay ekranı" | `SubForms` | 4.6 |
| "Üstte KPI kartları" | `Widgets` | 4.6 |
| "Alan otomatik dolsun (kullanıcı, tarih, tenant, sorgu sonucu)" | `*FieldsDefaultValueJson` | 4.3.5 |
| "Belge/sipariş numarası otomatik üretilsin" | `Sequence` kaydı + varsayılan değer | 9.9 · 4.3.5 |
| "Belge/sipariş numarası otomatik üretilsin" | `Sequence` kaydı + varsayılan değer | 9.9 · 4.3.5.2 |
| "Bağlı açılır listeler (il → ilçe)" | `LookupJson` cascade alanları | 4.3.4 |
| "Şu koşuldaki satır renkli olsun" | `ColumnStylingJson` | 4.3.7 |
| "Ekranın üstünde tarih/şube/durum filtresi" | `ExtraFilterJson` | 4.3.8 |
@ -1701,6 +1708,37 @@ taşır. `CustomKey`, `DbQuery`, `Sequence` gibi diğer türler `ListForm.FormFi
katmanıyla yazılır (§0.10). Deploy girdisinde sözleşmede karşılığı olmayan bir anahtar adıyla
reddedilir — sessizce yok sayılmaz.
#### 4.3.5.2 Wizard / MCP ekranında otomatik numara — `App.Definitions.Sequence`
Bir alanın otomatik numaralanmasına talep karar verdiğinde ("numara otomatik gelsin") ya da analiz
karar verdiğinde (proje/sipariş/talep/belge numarası: `ProjectNo`, `OrderNo`, `RequestNo`,
`DocumentNo` …), numara **`App.Definitions.Sequence`** numaratöründen alınır; numara koda, sorguya ya
da forma yazılmaz. Numara/kod alanı otomatik değilse (kullanıcı girer) kural uygulanmaz:
1. Numaratör `data/App.Definitions.Sequence.json` dosyasına satır olarak eklenir (`Name`, `Prefix`,
`PaddingSize`, `StartNumber`/`NextNumber`, `ResetPeriod`, `FormatTemplate` — §9.9; `Id` iş anahtarından
türetilmiş sabit GUID, `LastPeriodKey` yazılmaz). Aynı numarayı üreten uygun bir numaratör zaten
varsa (`query_list App.Definitions.Sequence`) o kullanılır, ikincisi açılmaz.
2. Alanın varsayılanı `ListForm.FormFieldsDefaultValueDto`'ya `CustomValueType: 5` ile yazılır;
`Value` numaratörün `Name`'idir:
```jsonc
{ "FieldName": "ProjectNo", "FieldDbType": 16, "Value": "ProjeCode1", "CustomValueType": 5, "SqlQuery": "" }
```
Formda numara önizlenir, kalıcı numara kayıt anında alınır (§9.9).
3. `@AUTONUMBER`, `DbQuery` ile `MAX(...) + 1`, sabit metin ya da `InsertAfterCommand` ile numara
üretme yazılmaz. Tek istisna talebin açıkça boşluksuz numara istemesidir (§9.9 son paragraf);
o zaman karar analizde **(onay)** ile yazılır.
4. Analiz numaratörü madde 8'de (alan → numaratör adı, `Prefix`, `FormatTemplate`, `ResetPeriod`)
gösterir; talepte biçim yoksa varsayılan `{Prefix}{Number}{Suffix}`, `PaddingSize: 5`, `ResetPeriod: 0`
ve modül kısaltmasından `Prefix` kararı madde 9'a yazılır.
Kullanıcının kendi girdiği kodlar (Depo Kodu `WH`, birim kodu) numaratör değildir; bu kural
yalnızca otomatik üretilecek numara içindir. `Sequence` kiracıya aittir (`IMultiTenant`):
host veritabanını paylaşan kiracıya seed dosyası uygulanmadığı için numaratör satırı o kiracıda
ekrandan açılır.
### 4.3.6 Doğrulama — `ValidationRuleJson`
Alan başına DevExtreme doğrulama kuralları dizisi. Wizard `IsRequired: true` alanlara `required`
@ -4494,7 +4532,7 @@ hepsi açık gösterilir.
"Sipariş numarası otomatik gelsin", "talep numarası her yıl 1'den başlasın" istekleri için kod
yazılmaz; bir `Sequence` kaydı açılır ve alanın varsayılan değeri `CustomValueType: 5` ile o
kayda bağlanır (§4.3.5).
kayda bağlanır (§4.3.5). Wizard/MCP üretiminde otomatik numara her zaman bu yoldan üretilir (§4.3.5.2).
Ekran: `/admin/list/App.Definitions.Sequence` · Yetki: `App.Definitions.Sequence{,.Create,.Update,.Delete}`

View file

@ -1570,7 +1570,7 @@ liste süzgeci ve çağrı kapısı aynı kuralı kullanır.
| `verify_wizard` | Deploy edilmiş ekranı veri yazmadan doğrular: menü kaydı ve URL'si, menünün istediği yetki tanımı (`AbpPermissions`), List yolunda ekran sorgusu (`GetSelectAsync`, tek satır, çağıranın yetkisiyle), Custom yolunda bileşen (etkin, rota = menü URL'si) ve seed kapanışı (`ExportAnalysis` uyarıları; engellemez). İsteğe bağlıdır, migrate sonrasında kullanılır; `App.DevRequests` döngüsünün adımı değildir — döngü `Testing`'de biter, kullanıcı elle test edip `Staging`'e alır (`lowcode.instructions.md` §0.11). |
| `start_dev_request` | Geliştirme talebini Id ya da tam başlıkla üstlenir: yalnızca `Ready to Start` durumundakini `In Progress` durumuna alır, diğerlerini reddeder; talebin metnini döndürür. Açıklamaya yapıştırılmış base64 görseller (`data:image/png|jpeg|gif|webp`) metinden ayıklanır (`McpDevRequestImages`), yerlerinde `[image-N]` kalır ve her biri ayrı MCP resim içeriği (`ImageContentBlock`) olarak döner — model görseli resim olarak görür, görsel hiçbir yere yüklenmez. Sonuç istemcinin 1 MB sınırına sığdırılır: büyük görseller küçültülüp JPEG'e çevrilir (`IMcpImageShrinker`), sığmayan gönderilmez ve metinde bildirilir. `.Write` + `App.DevRequests.Update` ister. |
| `get_dev_request` | Talebi durumuna dokunmadan, `start_dev_request` ile aynı biçimde (metin + analiz + resim içerikleri) okur; analizden önce ya da yarım kalan talebe dönmek için. `App.DevRequests` ister. |
| `save_dev_request_analysis` | `Backlog` ya da `Analysis` durumundaki talebin analizini (HTML) `Analysis` kolonuna yazar — var olanı değiştirir — ve talebi `Analysis` durumuna alır; diğer durumları reddeder. `Description`'a dokunmaz. Modül dokümanına yazmaz; doküman üretimde açılır. Analizin standardı `lowcode.instructions.md` §0.12. `.Write` + `App.DevRequests.Update` ister. |
| `save_dev_request_analysis` | `Backlog` ya da `Analysis` durumundaki talebin analizini (HTML) `Analysis` kolonuna yazar — var olanı değiştirir; `productionReady: true` (Üretime hazır: Evet) talebi `Ready to Start`'a, `false` (şartlı ya da Hayır) `Analysis` durumuna alır; diğer durumları reddeder. `Description`'a dokunmaz. Modül dokümanına yazmaz; doküman üretimde açılır. Analizin standardı `lowcode.instructions.md` §0.12. `.Write` + `App.DevRequests.Update` ister. |
| `add_dev_request_subtasks` | Talebin `SubTasks` listesine tamamlanmış satırlar ekler: model yalnızca başlığı verir, atanan kişi bağlanan kullanıcının adı (`userName`), bitiş tarihi bugün (`yyyy-MM-dd`) olarak sunucuda yazılır; var olan satırlar korunur. `.Write` + `App.DevRequests.Update` ister. |
| `append_dev_request_note` | Talebin `Analysis` kolonunun sonuna HTML ekler (üretim sonuç notu); `Description` talebin yazıldığı hâliyle kalır. İkisi de `update_row` ile yazılmaz — açıklama base64 görsel taşır. `.Write` + `App.DevRequests.Update` ister. |
| `list_components` / `get_component` / `save_component` / `delete_component` | Custom component'ler `ICustomComponentAppService` üzerinden; seed senkronu ve `DataSources` çözümü aynen çalışır. `save_component` ada göre ekler/günceller, tasarımcı belgesi (`Props.visualDesigner`, `sourceMode ≠ code`) taşıyan bileşene kod yazmayı reddeder — kod belgeden üretildiği için tasarımcıdaki ilk kayıtta ezilirdi. |

View file

@ -44,10 +44,11 @@ public interface IMcpDevelopAppService : IApplicationService
Task<McpDevRequestDto> GetDevRequestAsync(string request);
/// <summary>
/// Talebin analizini yazar (var olani degistirir) ve talebi Analysis durumuna alir; yalnizca
/// Backlog ya da Analysis durumundaki talep analiz edilir.
/// Talebin analizini yazar (var olani degistirir); analiz kosulsuz uretime hazirsa talebi
/// Ready to Start'a, degilse Analysis durumuna alir. Yalnizca Backlog ya da Analysis durumundaki
/// talep analiz edilir.
/// </summary>
Task<McpDevRequestDto> SaveDevRequestAnalysisAsync(string request, string html);
Task<McpDevRequestDto> SaveDevRequestAnalysisAsync(string request, string html, bool productionReady);
/// <summary>
/// Analizin sonuna HTML ekler. Aciklama talebin yazildigi haliyle kalir; uretim notlari

View file

@ -581,10 +581,11 @@ public class McpDevelopAppService(
/// <summary>
/// Durum kurali modelin dikkatine birakilmaz: yalnizca Backlog ya da Analysis durumundaki talep
/// analiz edilir. Analysis'teki talebin analizi begenilmediyse yeniden yazilir; Ready to Start'a
/// kullanici alir.
/// analiz edilir. "Uretime hazir: Evet" analiz uretimin karar vermeden uygulayabilecegi analizdir,
/// talep dogrudan Ready to Start'a gecer; sartli ya da Hayir olan analiz kullanicinin kararini
/// bekledigi icin Analysis'te kalir.
/// </summary>
public async Task<McpDevRequestDto> SaveDevRequestAnalysisAsync(string request, string html)
public async Task<McpDevRequestDto> SaveDevRequestAnalysisAsync(string request, string html, bool productionReady)
{
await EnsureToolAllowedAsync(McpToolNames.SaveDevRequestAnalysis);
await AuthorizationService.CheckAsync(DevRequestUpdatePermission);
@ -602,7 +603,9 @@ public class McpDevelopAppService(
}
devRequest.Analysis = html.Trim();
devRequest.Status = McpConsts.DevRequestStatuses.Analysis;
devRequest.Status = productionReady
? McpConsts.DevRequestStatuses.ReadyToStart
: McpConsts.DevRequestStatuses.Analysis;
await devRequestRepository.UpdateAsync(devRequest, autoSave: true);
await timesheetRecorder.RecordAsync(McpTimesheetTexts.Analysis);

View file

@ -24,7 +24,7 @@ internal static class McpServerInfoDefaults
"then produce them with deploy_wizard and save_component; the guide's file-writing steps map to these tools. " +
"Agree on screen type, data source, module and permissions with the user before deploying. " +
"Analyzing development requests (Backlog -> Analysis) follows get_dev_guide section 0.12: read with get_dev_request, " +
"write the analysis with save_dev_request_analysis, produce nothing and never touch Description; the user moves an approved analysis to Ready to Start. " +
"write the analysis with save_dev_request_analysis, produce nothing and never touch Description; pass productionReady true only when the analysis is ready for production without conditions (the request moves to Ready to Start), otherwise it stays in Analysis. " +
"Development requests (App.DevRequests) follow get_dev_guide section 0.11: claim each one with " +
"start_dev_request, which only accepts requests in Ready to Start; images pasted into the request arrive as image content and are part of the request (layout and demo rows). " +
"A request (Description) and its approved Analysis are its own brief: do not ask questions and do not wait for DB Migrate; deploy (demo rows go in deploy_wizard seedRows), complete the module document with get_module_doc / save_module_doc (section 0.13), then move the request to Testing and finish. " +

View file

@ -13,7 +13,7 @@ namespace Sozsoft.Mcp.Tools;
public static class McpDevelopPrompts
{
[McpServerPrompt(Name = McpPromptNames.AnalyzeDevRequest)]
[Description("Tek bir gelistirme talebini analiz eder ve Analysis durumuna alir. Talep Backlog ya da Analysis durumunda olmalidir.")]
[Description("Tek bir gelistirme talebini analiz eder; uretime hazirsa Ready to Start'a, degilse Analysis durumuna alir. Talep Backlog ya da Analysis durumunda olmalidir.")]
public static string AnalyzeDevRequest(
[Description("Talebin Id'si (GUID) ya da tam basligi.")]
string request)
@ -22,16 +22,16 @@ public static class McpDevelopPrompts
"Talebi ve gorsellerini get_dev_request ile oku; analizi save_dev_request_analysis ile yaz. " +
"Hicbir sey uretme (tablo, wizard, bilesen yok) ve Description'a dokunma. " +
"Arac reddederse (talep Backlog ya da Analysis degil, bulunamadi ya da birden fazla eslesme var) nedenini bildir ve dur. " +
"Sonunda kisa rapor ver: menu yeri, uretilecek artefaktlar, (onay) etiketli kararlar ve Uretime hazir satiri; talebi Ready to Start'a kullanicinin alacagini belirt.";
"Sonunda kisa rapor ver: menu yeri, uretilecek artefaktlar, (onay) etiketli kararlar, Uretime hazir satiri ve talebin yeni durumu (Ready to Start ya da Analysis).";
[McpServerPrompt(Name = McpPromptNames.AnalyzeBacklogRequests)]
[Description("Backlog durumundaki tum gelistirme taleplerini SortOrder sirasiyla analiz eder ve Analysis durumuna alir.")]
[Description("Backlog durumundaki tum gelistirme taleplerini SortOrder sirasiyla analiz eder; uretime hazir olanlari Ready to Start'a, digerlerini Analysis durumuna alir.")]
public static string AnalyzeBacklogRequests()
=> "App.DevRequests kuyrugundaki Backlog taleplerini query_list ile SortOrder sirasiyla oku ve tek tek analiz et. " +
"Once get_dev_guide ile lowcode 0.12 bolumunu oku ve oradaki standarda uy. " +
"Her talebi get_dev_request ile oku, analizi save_dev_request_analysis ile yaz; reddedilen talebi atla ve rapora yaz. " +
"Hicbir sey uretme ve Description'a dokunma. " +
"Sonunda parti raporu ver: talep basina menu yeri, (onay) etiketli karar sayisi ve Uretime hazir durumu; talepleri Ready to Start'a kullanicinin alacagini tek satirda belirt.";
"Sonunda parti raporu ver: talep basina menu yeri, (onay) etiketli karar sayisi, Uretime hazir durumu ve talebin yeni durumu (Ready to Start ya da Analysis).";
[McpServerPrompt(Name = McpPromptNames.ProcessDevRequest)]
[Description("Tek bir gelistirme talebini isler. Talep Ready to Start durumunda olmalidir.")]

View file

@ -138,13 +138,15 @@ public sealed class McpDevelopTools(IMcpDevelopAppService developAppService, IMc
=> ToContent(await developAppService.GetDevRequestAsync(request));
[McpServerTool(Name = McpToolNames.SaveDevRequestAnalysis, Destructive = true, Idempotent = true)]
[Description("Backlog ya da Analysis durumundaki bir talebin analizini (HTML) Analysis alanina yazar ve talebi Analysis durumuna alir; var olan analiz degistirilir, Description'a dokunulmaz. Diger durumlarda reddeder. Once get_dev_request ile talebi ve gorsellerini oku; analizin bolumleri ve standardi get_dev_guide lowcode 0.12'dedir. Analizi begenen kullanici talebi Ready to Start'a kendisi alir; MCP almaz.")]
[Description("Backlog ya da Analysis durumundaki bir talebin analizini (HTML) Analysis alanina yazar; var olan analiz degistirilir, Description'a dokunulmaz. productionReady true ise talep Ready to Start'a, false ise Analysis durumuna alinir. Diger durumlarda reddeder. Once get_dev_request ile talebi ve gorsellerini oku; analizin bolumleri ve standardi get_dev_guide lowcode 0.12'dedir.")]
public async Task<IList<ContentBlock>> SaveDevRequestAnalysisAsync(
[Description("Talebin Id'si (GUID) ya da tam basligi.")]
string request,
[Description("Analizin tamami, HTML.")]
string html)
=> ToContent(await developAppService.SaveDevRequestAnalysisAsync(request, html));
string html,
[Description("Analizin 'Uretime hazir' satiri kosulsuz Evet ise true; sartli (onay bekleyen, 'Evet, ancak …') ya da Hayir ise false. HTML'deki satirla ayni olmak zorundadir.")]
bool productionReady)
=> ToContent(await developAppService.SaveDevRequestAnalysisAsync(request, html, productionReady));
[McpServerTool(Name = McpToolNames.AppendDevRequestNote, Destructive = false, Idempotent = false)]
[Description("Talebin Analysis alaninin sonuna HTML ekler; var olan analize ve Description'a dokunmaz. Description talebin yazildigi haliyle kalir; uretim sonuc notunu (<h4>MCP</h4> + uretilenler, varsayimlar ve DB Migrate bekleyen wizard'lar) bu aracla ekle. Description'i ya da Analysis'i update_row ile yazma.")]

View file

@ -44,11 +44,17 @@ public class TenantLocalizationInitializer : ITransientDependency
return;
}
var language = await _settingManager.GetOrNullGlobalAsync(LocalizationSettingNames.DefaultLanguage) ?? "en";
var timeZoneId = await _settingManager.GetOrNullGlobalAsync(TimingSettingNames.TimeZone) ?? "UTC";
// Okunamayan ayar (tanımlar henüz yüklenmemiş, veritabanı o an yanıt vermiyor) mevcut değeri
// korur. Varsayılana düşmek süreç genelindeki saati UTC/Local arasında çevirir; o arada yazılan
// AbpSessions satırları 3 saat kaymış görünür ve oturum temizleyici açık oturumları siler.
var language = await _settingManager.GetOrNullGlobalAsync(LocalizationSettingNames.DefaultLanguage);
var timeZoneId = await _settingManager.GetOrNullGlobalAsync(TimingSettingNames.TimeZone);
ApplyCulture(language);
ApplyClockKind(timeZoneId);
if (!string.IsNullOrWhiteSpace(language))
ApplyCulture(language);
if (!string.IsNullOrWhiteSpace(timeZoneId))
ApplyClockKind(timeZoneId);
}
private static void ApplyCulture(string language)

View file

@ -246,6 +246,14 @@ Bir çelişki varsa sıra: `ai.instructions.md` → `dotnet.instructions.md` →
dosya adı önekli yazılır. `configs/seeds/wizard/` altındaki bütün dosyalar bu düzendedir; öneksiz
dosya yalnızca eski bir export arşivinden gelebilir ve düzenlenirken adı korunur. Ayrıntı:
`lowcode.instructions.md` §4.4 Adım 2.
23. **Otomatik numara Sequence'tan** → wizard/MCP üretiminde talep otomatik numara istediğinde ya da
analiz bir alanın (`ProjectNo`, `OrderNo`, `RequestNo` …) otomatik numaralanmasına karar verdiğinde
alan `App.Definitions.Sequence` numaratörüne bağlanır; elle girilen numara/kod alanı bu kurala
girmez. Numaratör
`data/App.Definitions.Sequence.json`'a satır olarak yazılır (uygun olan varsa yeniden kullanılır),
alanın varsayılanı `FormFieldsDefaultValueDto`'da `CustomValueType: 5`, `Value` = numaratörün `Name`'i.
`@AUTONUMBER`, `MAX + 1` sorgusu ya da SQL ile numara üretilmez (boşluksuz numara açıkça istenmedikçe).
Ayrıntı: `lowcode.instructions.md` §4.3.5.2.
### Cross-cutting: touching one thing means touching these too
@ -377,10 +385,11 @@ Bir çelişki varsa sıra: `ai.instructions.md` → `dotnet.instructions.md` →
- **Talep analizi** → `Description` talebin yazıldığı hâliyle kalır; MCP ona yazmaz. Analiz ve
üretim notları `Analysis` kolonundadır (Todo panosunda `AnalysisExpr`, Açıklama yanında sekme).
Durum sırası `Backlog → Analysis → Ready to Start → …`: "Analiz et" `save_dev_request_analysis`
ile yalnızca `Backlog`/`Analysis` talebini analiz edip `Analysis`'e alır (ekran/tablo üretmez,
ile yalnızca `Backlog`/`Analysis` talebini analiz eder (ekran/tablo üretmez,
modül dokümanına yazmaz — dosya ve dal bölümü üretimde, deploy ile açılır; onaylanan analiz bölümün
"2. Analiz ve kararlar" alt bölümüne üretimde `save_module_doc` ile yazılır);
`Ready to Start`'a kullanıcı taşır, üretim notu `append_dev_request_note` ile `Analysis`'e eklenir.
"2. Analiz ve kararlar" alt bölümüne üretimde `save_module_doc` ile yazılır). Durumu sunucu
`productionReady` ile belirler: "Üretime hazır: Evet" → `Ready to Start`, şartlı ya da Hayır →
`Analysis` (kullanıcı kararı bekler). Üretim notu `append_dev_request_note` ile `Analysis`'e eklenir.
Analiz standardı tek yerdedir: `lowcode.instructions.md` §0.12; prompt'lar oraya yönlendirir.
- **MCP şema araçları** → tablo/sütun bilgisi canlı katalogdan değil `Sas_H_DbTableColumn`
sözlüğünden okunur (`IMcpSchemaDictionary`). Sözlüğün alan adları

View file

@ -25,10 +25,25 @@
"IsActive": true,
"PaddingSize": 5,
"IncrementStep": 1,
"StartNumber": 1,
"NextNumber": 1,
"ResetPeriod": 3,
"FormatTemplate": "{Prefix}-{yyyy}{MM}{dd}-{Number}"
"ResetPeriod": 0,
"StartNumber": 1,
"LastPeriodKey": null,
"FormatTemplate": "{Prefix}{Number}{Suffix}"
},
{
"Id": "28981dbf-cf64-459c-bffc-fdfaeed4b2ef",
"Name": "ProjeCode1",
"Prefix": "PRJ",
"Suffix": null,
"IsActive": true,
"PaddingSize": 5,
"IncrementStep": 1,
"NextNumber": 1,
"ResetPeriod": 0,
"StartNumber": 1,
"LastPeriodKey": null,
"FormatTemplate": "{Prefix}{Number}{Suffix}"
}
]
}

View file

@ -18,7 +18,7 @@
"Priority": "5",
"Completed": false,
"SortOrder": 0,
"Timesheets": null,
"Timesheets": "[{\"id\":\"cb5cb27c-2cbc-1835-a340-3a2432d8e57b\",\"date\":\"2026-10-09\",\"userName\":\"system@sozsoft.com\",\"description\":\"Talep analiz edildi\",\"duration\":0.1333}]",
"SubTasks": null,
"Analysis": ""
}