Uyumluluk: Pactmark 0.2.x. Mevcut genel yazım cephesi kind: "read" işlemlerini sunar. Yazma-etkisi yazımı, karar challenge’ları ve mutabakat komutları çalışma-zamanı yüzeyinde vardır ve genel cepheye taşınmaktadır — bkz. Sınırlar.

Araç, bir beyan ve bir fonksiyondur

Şekil 1. Soldaki her şey aracın kayıt özetine katkı verir. Bir aracın eski bir grantı korurken sessizce daha tehlikeli hâle gelememesinin nedeni budur.
Araç id’si namespace.name@version biçimiyle kısıtlıdır ve implementationVersion bilinçli olarak ayrıdır: sözleşme sürümü tüketicilere ne bekleyeceklerini söyler, uygulama sürümü sözleşme aynı kalsa bile bir davranış değişikliğini görünür kılar.

Yürütme bağlamının verdikleri

SafeRunContext
tenantId, runId, stepId, purposeCode, dataClass — doğru karar vermeye yetecek kadar ve kasıtlı olarak bir insanı tanımlamaya yetmeyecek kadar.
EgressHttpClient
Bir aracın kullanması gereken tek ağ istemcisi. Beyan edilmiş izin listesini, yönlendirme politikasını, TLS doğrulamasını ve bayt/süre sınırlarını uygular.
ArtifactWriter
Bayt yazar ve { artifactId, contentDigest } döndürür. İçerik adresleme sonradan değil burada olur.
AbortSignal
İptal ve son tarih yayılımı. Bunu yok sayan bir araç yine de timeoutMs ile sınırlanır, ama önce bütçeyi harcar.

Etkiler: ilginç olan yarı

Bir okuma gözlemler. Bir etki koşunun dışında bir şeyi değiştirir — ve bir kez gerçekleşmiş olabilir hâle geldiğinde seçenekleriniz kalıcı olarak daralır. Şekil 2. Strateji, başarısızlık anında seçilmez; araca kayıtlıdır. Bu sıralama güvenlik özelliğinin ta kendisidir: yeniden denemenin güvenli olduğuna, zaten öyle olmasını istedikten sonra karar veremezsiniz.

”Zaman aşımında yeniden dene” neden bir hatadır

Zaman aşımı size yanıtın gelmediğini söyler. İsteğin işlenip işlenmediği hakkında hiçbir şey söylemez. Zaman aşımında yeniden deneyen sistemler yalnızca her hedef idempotentse doğrudur — ki bu bir olgu değil, bir varsayımdır. Pactmark varsayımı baştan söylemenizi ister:

native

Hedefin bu tam etki anahtarı için idempotent olduğunu iddia ediyorsunuz. Tekrarlamak güvenlidir.

transactional

Etki yerel durumla birlikte commit olur; geri alma onu da kaldırır.

reconcilable

Tekrarlayamazsınız ama sonradan sorgulayıp ne olduğunu öğrenebilirsiniz.

none

Güvenli bir tekrar yoktur. Etki park edilir ve yetkilendirilmiş bir insan kararını bekler.

Etki defteri

Pactmark her dış sınırın çevresine hazırlık, onay ve mutabakat durumu yazar. EffectPrepared bir effectKey ve kayıtlı strategy taşır; EffectDispatched bir deneme numarası taşır; EffectAcknowledged onay makbuzunu ve bir sonuç özetini taşır. Sonuç bilinmediğinde EffectUncertain ve ardından EffectNeedsReconciliation kaydedilir — ve şema effectMayHaveOccurred: true değerini zorunlu kılar. Belirsizliği güvenliği ima ederek kaydedemezsiniz. Çözümün tam olarak iki biçimi vardır: abandon_uncertain, ona bağımlı olan her şey için KAF_EFFECT_ABANDONED_UNCERTAIN üretir. Bu sürtünme kasıtlıdır.

Telafi, yeni ve yetkilendirilmiş bir koşudur

Telafi bir “geri al” değildir. CompensationRequested, kendi yetkisi, kendi WorkOrder’ı ve kendi kanıtı olan ayrı bir telafi koşusu başlatır. Başka birini tersine çeviren bir iş eylemidir ve öyle yetkilendirilir.
İnsan tahminleri makbuz değildir. “Muhtemelen geçmiştir” bir mutabakat çözümü değildir ve API size onu koyacak bir yer vermez.

Araç tanımlama

Egress, kapsamlar ve testlerle pratik bir anlatım.

Olay kurtarma

Bir şey ters gittiğinde kontrol altına alma, sınıflandırma ve mutabakat.