Operasyon
Hata Referansı
Luma model ve tool hatalarını normalize eder: bunların her biri bir kod, bir mesaj ve bir retryable bayrağı taşır; bu bayrak retry döngüsünün ve run policy'lerin davranışını doğrudan belirler. Parse hataları, doğrulama hataları ve v0.4.0 veri yüzeyinin tamamı bu normalizasyonun dışındadır — yalnızca mesaj taşırlar.
Hata biçimi
Error: [TOOL_INPUT_INVALID] calculate.input.a must be a number.
CLI hataları Error: [CODE] message biçimindedir ve exit code 1 ile sonlanır. Kod yalnızca normalize edilmiş model/tool hatalarında görünür. Parse hataları, doğrulama hataları ve her veri yüzeyi hatası — datasource/query/command, std/http, std/state, parallel over — kodsuzdur; yani CLI satırı önünde [CODE] olmadan doğrudan mesajla başlar.
try/catch içinde yakalandığında hata bir nesnedir:
{
"code": "TOOL_TIMEOUT",
"message": "Tool 'http_get' timeout occurred (3000 ms).",
"retryable": true,
"details": { "url": "https://…" }
}import agent from "std/agent"
} catch error {
code = agent.errorCode(error) // "TOOL_TIMEOUT"
msg = agent.errorMessage(error)
if agent.isRetryable(error) {
...
}
}Normalize edilmemiş hatalar yalnızca message taşır: bir pure fn içindeki tip hatası ve veri yüzeyi hatalarının tamamı. Bunlarda agent.errorCode null, agent.isRetryable ise false döner — bayrak hatanın kendi retryable alanını okur ve kodsuz bir hatada böyle bir alan yoktur. Bunları mesaj metniyle eşleştir.
Model hataları
| Kod | Durum | Ne zaman | Ne yapmalı |
|---|---|---|---|
MODEL_PROVIDER_ERROR | kalıcı / retryable | Gateway 2xx dışı yanıt verdi (429 ve 408 dışında). | 5xx, 409 ve 425 retryable'dır. Kalıcı olanlar için base_url, model kimliği ve yetkiyi kontrol et. |
MODEL_RATE_LIMIT | retryable | HTTP 429. | fallback policy ile ikinci modele geç veya isteği yavaşlat. |
MODEL_TIMEOUT | retryable | HTTP 408 veya istemci tarafı timeout. | timeout değerini yükselt; büyük prompt'ları böl. |
MODEL_CANCELLED | kalıcı | HTTP 499 veya iptal sinyali (race kaybedeni, parallel timeout'u). | Genellikle beklenen davranıştır. |
MODEL_EMPTY_CONTENT | retryable | Provider içerik döndürmedi. | max_tokens çok düşük olabilir; streaming yanıtı erken kesilmiş olabilir. |
MODEL_INVALID_RESPONSE | retryable | Yanıt ayrıştırılamadı, geçerli JSON değildi ya da schema doğrulamasından geçmedi. | En sık görülen hata. retry ver, schema'yı daralt, @desc ve @feedback ekle. |
MODEL_REFUSAL | kalıcı | Model isteği açıkça reddetti. | Prompt'u yeniden yaz — retry etmez, etmemeli. |
MODEL_INVALID_TOOL_CALL | retryable | Tool call argümanları geçerli JSON değildi. | Tool parametre schema'sını sadeleştir. |
MODEL_UNSUPPORTED | kalıcı | Tanınmayan provider değeri. Normalde parse zamanında yakalanır; bu kod yalnızca savunma amaçlıdır. | Geçerli provider adlarını buradan kontrol et. |
MODEL_BUDGET_EXCEEDED | kalıcı | token_budget, cost_budget veya fusion_input_tokens aşıldı. | Bütçeyi yükselt veya prompt/memory boyutunu düşür. |
MODEL_VOTE_NO_QUORUM | retryable | vote policy'de quorum oluşmadı. | quorum'u düşür veya schema'yı daralt — serbest metin alanları oy birliğini imkânsızlaştırır. |
MODEL_VOTE_TIE | kalıcı | Quorum sağlandı ama beraberlik var ve tie: "fail". | tie: "first" veya "highest_confidence" kullan. |
MODEL_VOTE_CONFIDENCE_UNAVAILABLE | kalıcı | tie: "highest_confidence" seçili ama sonuçlarda sayısal confidence yok. | Schema'ya confidence: float [0..1] ekle. |
MODEL_FUSION_NO_INPUTS | retryable | fusion policy'de hiçbir aday başarılı olmadı. | Aday modelleri ve schema uyumluluğunu kontrol et. |
HTTP status eşlemesi
| Status | Kod | Retryable |
|---|---|---|
408 | MODEL_TIMEOUT | retryable |
409 · 425 | MODEL_PROVIDER_ERROR | retryable |
429 | MODEL_RATE_LIMIT | retryable |
499 | MODEL_CANCELLED | kalıcı |
5xx | MODEL_PROVIDER_ERROR | retryable |
| diğer 4xx | MODEL_PROVIDER_ERROR | kalıcı |
Provider'ın gövdesindeki error.code, error.type ve ham yanıtın ilk 1000 karakteri details alanına redakte edilerek eklenir.
Tool hataları
| Kod | Durum | Ne zaman | Ne yapmalı |
|---|---|---|---|
TOOL_NOT_FOUND | kalıcı | Contract var ama registry'de handler yok. | Handler'ı src/tool-registry.ts'e ekle veya --tool-module ile yükle. |
TOOL_INPUT_INVALID | kalıcı | Input schema doğrulamasından geçmedi. | Native çağrılarda modelin ürettiği argümanlar hatalıdır — parametre @desc'lerini iyileştir. |
TOOL_OUTPUT_INVALID | kalıcı | Handler'ın döndürdüğü değer output schema'sına uymuyor. | Handler'ı düzelt; --generate-tool-types ile tip güvenliği ekle. |
TOOL_TIMEOUT | retryable | Etkin timeout aşıldı. | timeout/tool_timeout yükselt; handler'ı AbortSignal'e duyarlı yaz. |
TOOL_CANCELLED | kalıcı | Üst akış iptal edildi (parallel timeout'u, race, Ctrl-C). | Genellikle beklenen davranıştır. |
TOOL_PERMISSION_DENIED | kalıcı | credential eksik, scope izinli değil, deny_write engelledi ya da approval verilmedi. | Mesaj hangisi olduğunu söyler. LUMA_APPROVED_TOOLS veya tool_scopes ayarla. |
TOOL_CONTEXT_INVALID | kalıcı | needs context'i yok, tool_contexts izin vermiyor ya da tipi uymuyor. | luma.config.json içindeki tool_contexts'i ve agent allowlist'ini kontrol et. |
TOOL_EXECUTION_ERROR | retryable / kalıcı | Handler istisna fırlattı. | Typed hata için LumaToolError kullan ve retryable'ı sen belirle. |
TOOL_ERROR_INVALID | kalıcı | Fırlatılan hata, contract'taki error: schema'sına uymuyor. | Hata nesnesini schema'ya uydur. |
TOOL_IDEMPOTENCY_CONFLICT | kalıcı | Aynı idempotency key farklı input ile kullanıldı. | Anahtar üretimini gözden geçir — istek başına tekil olmalı. |
TOOL_CIRCUIT_OPEN | kalıcı | tool_failure_limit aşıldı. | Alt sistemi düzelt; limiti bilinçli olarak yükselt. |
Veri yüzeyi hataları
v0.4.0 veri yüzeyi — datasource/query/command, std/http, std/state ve parallel over — adlandırılmış hatalar fırlatır ve hiçbiri kod taşımaz. Düz hata olarak fırlatılırlar; dolayısıyla bir try/catch içinde bu sayfadaki her mesaj için agent.errorCode(error) null, agent.isRetryable(error) ise false döner. Bunları mesaj metniyle eşleştir. Bildirimlerin kendisi Veri & Entegrasyon sayfasında; bu sayfa onların hata görünümünün, Telemetry ise trace görünümünün sahibidir.
Error: query 'Orders' expected exactly one row, got 3.
Önünde [CODE] yok — aşağıdaki her mesajın biçimi budur. Bir kısmı program başlamadan, parse zamanında verilir; tablolarda işaretlendi.
datasource · query · command
| Mesaj | Sebep ve çözüm |
|---|---|
datasource 'X' has no registered bridge; export it from a tool module as datasources.X. | Bildirim var ama hiçbir şey onun için bridge kaydetmemiş. Contract Luma'nın, driver senin: bir tool modülü datasources.X export etmelidir. --tool-module ile ya da luma.config.json içindeki tool_modules ile yükle. |
datasource 'X' is missing credential: <ENV>. | credential: ile adı verilen environment değişkeni tanımlı değil. Yalnızca varlığı kontrol edilir — değer hiçbir zaman prompt'a, trace'e veya hata mesajına okunmaz. |
query 'X' bridge must return a list of rows. | Bridge bir query'ye array olmayan bir şey döndürdü. Boş sonuç için null değil [] döndür. |
command 'X' bridge must return the affected row count as an integer. | Bir command -> int olarak bildirilir ve bridge tam olarak o sayıyı üretmelidir — satırları ya da driver'ın sonuç nesnesini değil. |
query 'X' expected exactly one row, got N. | Schema[] değil -> Schema yazmak tam olarak bir satır bildirir; N bridge'in gerçekte döndürdüğüdür, sıfır dahil. Sayı garanti değilse Schema[] bildir. |
query|command 'X' timed out after N ms on datasource 'Y'. | Bridge çalışırken datasource'un timeout'u doldu. Mesaj bildirim türüyle başlar, dolayısıyla aynı biçim ikisini de kapsar. |
Result set exceeded the row limit (200000). Process in batches with col.chunk, or raise --max-rows. | Satır üreten her yol için geneldir: aynı tavan ve aynı mesaj hem query sonuçlarını hem io.readFiles'ı korur. Mesajdaki sayı etkin limittir; --max-rows onu değiştirir. Bkz. limitler. |
query 'X' sql cannot interpolate; use $1 parameters. | Parse zamanı. sql string'inin içinde {name} biçimi var. Parametreler $1..$n olarak sırayla bağlanır; injection yüzeyi dilin kendisinde kapatılmıştır. command da aynı mesajla reddedilir. |
Datasource 'X' does not support 'transaction'; it is deliberately out of this package — handle transactions inside the bridge (ROADMAP § U4). | Parse zamanı. Transaction bilinçli olarak yok: transaction sınırı bridge'in içine aittir; burada bildirmek dili hiçbir contract'ın zorlayamayacağı bir semantiğe bağlardı. Diğer bilinmeyen anahtarlar has no key 'k'; known keys: … alır. |
std/http · std/state
| Mesaj | Sebep ve çözüm |
|---|---|
http.<fn> could not reach '<url>': <reason>. | Fırlatılan tek ağ hatası. reason, Luma'nın kendi timeout'u tetiklendiyse timed out after N ms, diğer her şeyde connection failed olur — DNS hatası, reddedilen bağlantı ve TLS hatası tek kovaya normalize edilir, çünkü engine'ler bunları sınıflandırmada anlaşamıyor. İstek child process'i hiç yanıt vermezse üçüncü bir biçim çıkar (child exited with status N). |
http.<fn> response exceeded the byte limit (10485760); raise --max-response-bytes if this is intended. | Yanıt gövdesi tavandan büyük (varsayılan 10 MiB). Gövde kırpılmaz, atılır. |
http.<fn> timeout must be a positive integer of milliseconds. | timeout varsayılanı olmayan zorunlu bir argümandır; 0, negatifler ve kesirler reddedilir: sessiz sonsuz bekleme, bu paketin ortadan kaldırmak için var olduğu hata sınıfının ta kendisidir. |
http.<fn> expects a url string. · http.<fn> expects headers as a map. | Argüman biçimleri. Header yoksa {} geç — argümanın kendisi opsiyonel değildir. |
state.read needs a state file; pass --state-file <path>. | --state-file yokken her std/state fonksiyonu adıyla reddeder; mesajdaki ad çağırdığın fonksiyondur. Varsayılan konum yoktur, çünkü sessiz varsayılan sessiz veri kaybıdır. |
state store could not be read: <file> (<reason>). | State dosyası var ama bir JSON nesnesi değil. Dosyanın hiç olmaması hata değildir — boş store olarak okunur. |
parallel over
| Mesaj | Sebep ve çözüm |
|---|---|
parallel over 'X' requires a limit. | Parse zamanı. Eşzamanlılık tavanı zorunludur — bir query sonucu üzerinde sınırsız fan-out, arkasındaki datasource'u devirmenin yoludur. |
parallel over 'X' on_error fallback is not supported; use on_error continue or the default fail_fast. | Parse zamanı. Veri-paralel işin düşeceği bir fallback dalı yoktur; burada yalnızca continue ve fail_fast vardır. |
parallel over cannot be nested. | Parse zamanı. İç içe fan-out iki limiti çarpar ve etkin eşzamanlılık kaynaktan okunamaz hale gelir. |
parallel over 'X' body must return a <Schema>. | Parse zamanı. Gövdede hiç return yok. |
parallel over 'X' body did not return a value for '<item>'. | Runtime: return var ama bu elemanın izlediği yol ona hiç ulaşmadı — koşulu false çıkan bir if içindeki return gibi. Her eleman bir değer üretmelidir; bazı elemanların düşmesi isteniyorsa on_error continue kullan. |
parallel over 'X' expected a list from '<expression>', got <kind>. | Koleksiyon ifadesi bir listeye çözülmedi. <kind>, gelen değerin JavaScript düzeyindeki türüdür (object, null, nothing). |
http.get, 404 ve 500 için de tıpkı 200'de olduğu gibi { status, body, headers } döndürür: status kodu veridir, başarısızlık değil. Bir HTTP çağrısını saran try/catch hatalı status'te hiç tetiklenmez — fırlattığı tek hata host'a ulaşamamaktır. response.status'ü kendin kontrol et ve kontrol edilmemiş bir status'ü ele alınmamış bir hata yolu olarak gör.
Retry semantiği
hata oluştu ↓ retryable == false ? ├── evet → döngü anında durur, hata yukarı fırlatılır └── hayır ↓ deneme sayısı < retry ? ├── hayır → hata fırlatılır └── evet ↓ prompt'a hata metni eklenir → yeni attempt_id → tekrar istek
| Katman | Ayar | Neyi tekrarlar |
|---|---|---|
ask retry'ı | retry N veya agent retry: | Tüm LLM isteğini; hata metni prompt'a eklenir. |
| Tool retry'ı | Tool contract'ındaki retries | Yalnızca handler'ı; LLM'e dokunmaz. |
| Run policy | fallback + on: [...] | Başka bir modele geçer. |
Bir fallback policy'si altında her aday model retry: 0 ile çalışır — dayanıklılık policy'nin kendisinden gelir. Tool retry'ları ise LLM retry'ından tamamen bağımsızdır ve tool'un kendi retry_backoff zamanlamasını kullanır.
Bir tool retryable: false hata fırlattığında yalnızca tool retry'ı değil, onu çağıran LLM retry döngüsü de durur. Bu bilinçlidir: kalıcı bir izin hatasında modele aynı isteği tekrar ettirmenin anlamı yoktur.
Doğrulama mesajları
Doğrulama hataları kodsuzdur ve bir turdaki tüm hatalar birleştirilerek raporlanır:
Error: A.f.v.name must be at least 2 characters. A.f.v.age must be an integer. A.f.v.email must be in email format. A.f.v.tags must contain unique items. A.f.v.score must be at most 100. A.f.v.role must be one of these values: admin, user. A.f.v.extra is not defined in the schema.
| Mesaj kalıbı | Sebep |
|---|---|
X.y missing. | Zorunlu alan yok. |
X.y must be a string. · must be an integer. · must be a number. · must be a boolean. | Tip uyumsuzluğu. must be a number ayrıca NaN/Infinity için de çıkar. |
X.y must be one of these values: … | Enum ihlali. |
X.y must be an array. | Array beklenirken başka tip geldi. |
X.y must contain exactly N items. | Tuple uzunluğu. |
X.y must contain at least/at most N items. | @minItems / @maxItems. |
X.y must contain unique items. | @unique. |
X.y.field values must be unique. | @uniqueBy. |
X.y must contain the expected item. | @contains. |
X.y must be at least/at most N characters. | @length. |
X.y does not match the expected format. | @match. |
X.y must be in <format> format. | @fmt. |
X.y must be at least/at most N. | @range veya aralık kısayolu. |
X.y does not satisfy its @valid rule: <expression> | @valid. |
X.k is not defined in the schema. | Bilinmeyen alan. |
X.y was given more than one alias: a, b | Kanonik alan yok ve @alias adlarından ikisi ya da daha fazlası aynı anda gelmiş — runtime aralarından kazanan seçmez. |
X does not match any union type: … | … | Union'ın hiçbir üyesi tutmadı. |
X does not satisfy its where rule: <expression> | where invariant'ı. Boolean dönmeyen bir where ayrıca X where rule must return a boolean result: … ile başarısız olur. |
X conditional rule 'a' requires/forbids field: <condition> | when kuralı; 'a', dalın istediği ya da yasakladığı alanın adıdır. |
X.sources.sources contains an invalid context source: <id> | Tanımsız context kimliği. sources runtime'ın yerleşik kaynak-doğrulama alanıdır; adı sabittir ve mesajda iki kez görünür, çünkü yol zaten alan adıyla bitiyor. |
X.y cannot be given by its canonical name and an alias at the same time. | Hem kanonik ad hem alias gönderildi. |
@feedback tanımlıysa bu mesajlar Path.field: <your message> ile değiştirilir.
Kural soft olduğunda aynı metin başka yerden gelir
@severity("warn") taşıyan bir kural yukarıdaki mesajı üretir, ama sonuç yolunda bir hata üretmez. Metin bunun yerine finding'in message alanında yol alır ve koşu devam eder. İki satır bu yola özgüdür ve zaten hata değildir:
| Satır | Nerede görünür | Ne demek |
|---|---|---|
Warning: 2 findings accepted but never read: A.f.return (1), B.g.return (1). Read them with findings.of(...) from std/findings. | Standart hata, koşunun sonunda | Finding üretilmiş ve kimse okumamış. Çıkış kodu 0 kalır — bkz. @severity. |
Findings cap reached (1000); 412 more soft violations were not recorded. | rule alanı findings.capped olan bir finding'in message'ı | Bir operasyon operasyon-başı tavanı aşmış. Kesilenin sayısı her zaman kayıttadır. |
Girdi yolunda — tool argümanı, method ya da pure fn parametresi — @severity yok sayılır ve yukarıdaki olağan hatayı alırsın.
Parse ve başlangıç hataları
Bunlar program çalışmaya başlamadan önce oluşur ve kod taşımazlar.
| Mesaj | Sebep |
|---|---|
Invalid schema field: … | Alan sözdizimi hatalı — artık bir token ya da require öncesinde bölünmüş bir keyword devam satırı. |
A schema line may define only one field: … | Aynı satırda iki name: type çifti var. Tek alandan sonra gelen virgül sorun değildir. |
Unknown annotation: @x | Tanınmayan annotation. @prompt alan üzerinde kullanılamaz — yalnızca schema başlığında. |
@x can only be used once on a field. | Tek kullanımlık annotation tekrarlandı. |
@length can only be used on string fields… | Annotation, alanın tipiyle uyumsuz. |
Field range cannot be specified with both legacy syntax and @range. | float [0..1] ile @range birlikte yazıldı. |
No schema named 'X' was found. | Tanımsız schema referansı. |
No model named 'X' was found. | Agent'ta tanımsız model profili. |
'X' is not registered in the tool registry. | Contract var, handler yok. |
Agent method f cannot use ask and return together. | Terminal ask ile return bir arada. |
fn f return schema differs from the ask schema. | Method çıkışı ile ask hedefi uyuşmuyor. |
Agent 'A' does not allow tool 'x' to be called directly. | Tool, agent'ın tools listesinde değil. |
'x' is not defined as a dependency. | uses ile bildirilmemiş bir ad üzerinden x = name.f(...). Std modül alias'larında da görülür → ayrılmış namespace'ler. |
'dependency' cannot be used inside a pure fn. | Aynı sebep, pure fn gövdesinde. |
IO cannot be used inside pure fn 'f'. | pure fn içinde std/io çağrısı. io fn kullan. |
where is deterministic and cannot use IO. | where içinde io.*. |
ask, agent call or parallel not found. | Programda üst düzey operation yok. |
.env must define base_url, api_key, and model. | Legacy gateway gerekiyor ama yapılandırılmamış. |
Model 'X' is missing credential: api_key. | getEnv ile istenen environment değişkeni yok. |
Import module may contain only schemas and exported pure fns: … | Import edilen dosyada agent/tool/operation var. |
Import cycle found: … · Agent dependency cycle found: … · Pure fn cycle found: … | Döngüsel bağımlılık. |
io path cannot escape the project directory: … | IO yolu kökün dışında. |
Model 'X' has unknown provider 'y'. Valid values: … | Tanınmayan provider değeri; hata parse zamanında verilir ve geçerli değerleri listeler. |
@valid expression is not supported: … | Desteklenmeyen @valid lambda gövdesi; schema alanı, tool parametresi ve fn parametresi fark etmeksizin parse zamanında reddedilir. |
@severity value must be "error" or "warn": review | Bilinmeyen severity. Küme ikide kapalı — kendi tier sözlüğün, finding'leri okuyan kodda yaşar. |
@severity must follow the @valid rule it modifies. | Önünde @valid olmayan @severity. Alanda, ardından geldiği kuralı niteler; alanın tamamını değil. |
where only supports the @feedback and @severity annotations: @desc | where satırında başka bir annotation. |
findings is io and cannot be used inside @valid or where rules: findings.count | Deterministik kalması gereken bir kuraldan std/findings çağrısı. Bir kuralın kendi ihlallerini okumasını engeller. |
pure fn X parameter block not closed. | İmzada kapanmamış parantez. |
Operator '%' is not supported: y % 2 | Dilde olmayan bir operatör. Mesaj operatörü adlandırır ve satırı alıntılar; böylece aşağıdaki tanımsız-değişken hatasıyla karıştırılamaz. Kapsam: ?. ** % & | ve ? :. |
'??' cannot be mixed with '&&' or '||' without parentheses: n ?? b || b | Okunuş belirsiz olurdu; kastettiğin tarafı parantezle. (n ?? b) || b ve b || (n ?? b) ikisi de meşru. |
Teşhis rehberi
| Belirti | İlk bakılacak yer |
|---|---|
| Model sürekli aynı alanı yanlış üretiyor | Alana @desc ve @feedback ekle; retry ver. Trace'te validation event'lerini filtrele ve hangi kuralın patladığını gör. |
| Model tool'u hiç çağırmıyor | Native çağrı model kararına bağlıdır ve zorlanamaz. Garantili çalışması gerekiyorsa direct tool kullan. |
| İlk yanıt biçimsiz geliyor, ikinci deneme düzeliyor | Beklenen davranış: tools tanımlıyken ilk istekte response_format gönderilmez. retry ver. |
| Strict gateway isteği reddediyor | Schema'da map<T> var mı? Entry[] desenine geç. |
| Alan array bekliyorum ama tek değer geliyor (veya tersi) | float[0..1] ile float [0..1] karışmış olabilir → kısayollar. |
Boolean if condition expected: … | Mantıksal bağlamda boolean olmayan bir değer var — ! yalnızca boolean üzerinde çalışır, &&/|| parçaları da boolean olmalıdır → expression dili. |
'x' is not defined as a dependency. | Std modül alias'ı ayrılmış isimlerden biri değil → import kuralları. |
| Bütçe hiç tetiklenmiyor | Gateway usage döndürmüyor olabilir; cost_per_1k_tokens ayarlanmamış olabilir. Trace metriklerini kontrol et. |
| Tool timeout'u beklediğimden kısa | Etkin süre min(tool.timeout, tool_timeout_max)'tur. |
vote hiç quorum sağlamıyor | Serbest metin alanları tam JSON eşitliğini imkânsızlaştırır. Dar schema kullan → vote. |
| Görsel modele ulaşmıyor | Model profilinde multimodal: true var mı? Yoksa marker düz metin olarak gider. |
| Ham model yanıtını görmek istiyorum | LUMA_DEBUG_MODEL_RESPONSE=1 ile çalıştır — yanıtın ilk 4000 karakteri hata detayına eklenir. |
http.get etrafındaki try/catch 500'de hiç tetiklenmiyor | Status kodu hata değildir: 404 ve 500 sıradan bir { status, body, headers } değeri olarak döner. response.status'ü kendin kontrol et → std/http. |
parallel over girdideki eleman sayısından az sonuç döndürdü | on_error continue sözleşmesi budur: başarısız eleman atlanır, listede boşluk bırakmaz. Tek sinyal parallel_over telemetry event'idir → düşme sayacı. |
Datasource retry bildirdiği hâlde başarısız command tekrar denenmiyor | Bilinçli: okumalar tekrar denenir, yazmalar denenmez. Idempotency anahtarı olmayan tekrar edilmiş bir yazma iki kez uygulanabilir; bu yüzden command için deneme sayısı 1'de sabittir. İfade gerçekten idempotent ise tekrarı bridge'in içinde yap → datasource. |
# Hızlı teşhis seti luma program.luma --all --trace-file /tmp/t.json jq -r '.events[] | select(.ok==false) | "\(.type) \(.name) \(.error)"' /tmp/t.json jq -r '.events[] | select(.type=="validation" and .ok==false) | .metadata.rule' /tmp/t.json | sort | uniq -c | sort -rn jq '.metrics' /tmp/t.json