WEB / WEB-21.01
Source’tan deployment’a
Build output’un byte kimliğini, kontrol sonuçlarını ve release kararını ayrı kanıtlarla değerlendir.
1. Core · Mekanizma
Hareket olmadan bütün senaryoları oku
Local build
- Input identity
public-note.json ve theme.css source girdileri hazırdır. Yerel builder henüz index.html/site.css üretmedi; verifier bu çıktıları kontrol etmedi.
- Source inputs
- Fixed public inputs
- Local builder
- Builder not run
- Independent verifier
- Verifier not run
- Local candidate registry
- baseline-a only
- Input oku
Builder yalnız own temporary public-note.json ve theme.css required inputs’ını okur; unrelated user file yoktur.
- Source inputs
- Fixed public inputs
- Local builder
- Required inputs read
- Independent verifier
- Verifier not run
- Local candidate registry
- baseline-a only
- Render / copy
Own build title’ı HTML’e render eder ve CSS bytes’ını copy eder; JS module bundler çalıştırılmaz.
- Source inputs
- Fixed public inputs
- Local builder
- HTML / CSS produced
- Independent verifier
- Verifier not run
- Local candidate registry
- baseline-a only
- Artifact identity
Fixed entry order ve timestamp ile static archive üretilir; digest exact bytes’ı kimlikler, approval değildir.
- Source inputs
- Fixed public inputs
- Local builder
- Archive / digest ready
- Independent verifier
- Verifier not run
- Local candidate registry
- baseline-a only
- Independent read
Verifier independent HTML parser ve ZIP reader ile produced title, entries ve CSS bytes’ını inceler.
- Source inputs
- Fixed public inputs
- Local builder
- Archive / digest ready
- Independent verifier
- Tea title / entries read
- Local candidate registry
- baseline-a only
- Gate pass
Selected local assertions geçer; bu verification publication, environment parity veya runtime health değildir.
- Source inputs
- Fixed public inputs
- Local builder
- Archive / digest ready
- Independent verifier
- Selected checks passed
- Local candidate registry
- baseline-a only
- Local record
Yerel candidate registry kontrol edilen digest’i kaydeder. Bu kayıt deployment, route activation veya push yapıldığı anlamına gelmez.
- Source inputs
- Fixed public inputs
- Local builder
- Archive / digest ready
- Independent verifier
- Selected checks passed
- Local candidate registry
- candidate-a local only
Gate failed
- Input sabit
Source yine Tea note içerir; bu dalın verifier girdisi Coffee note bekler. Builder henüz çıktı üretmedi ve bu uyuşmazlık için karar verilmedi.
- Source inputs
- Fixed public inputs
- Local builder
- Builder not run
- Independent verifier
- Verifier not run
- Local candidate registry
- baseline-a only
- Build geçer
Own builder valid Tea HTML üretir; build success, independent expected content’in sağlandığı anlamına gelmez.
- Source inputs
- Fixed public inputs
- Local builder
- Tea HTML produced
- Independent verifier
- Verifier not run
- Local candidate registry
- baseline-a only
- Actual oku
Independent parser actual Tea note title’ını okur; expected Coffee note hâlâ separate test expectation’dır.
- Source inputs
- Fixed public inputs
- Local builder
- Tea HTML produced
- Independent verifier
- Actual Tea title read
- Local candidate registry
- baseline-a only
- Gate reject
Content assertion mismatch verifier result’u failed yapar; candidate promotion’a hazır sayılmaz.
- Source inputs
- Fixed public inputs
- Local builder
- Tea HTML produced
- Independent verifier
- Expected mismatch
- Local candidate registry
- baseline-a only
- Record korunur
Yerel baseline korunur. Kontrolden kalan candidate, production veya onaylanmış artifact olarak işaretlenmez.
- Source inputs
- Fixed public inputs
- Local builder
- Tea HTML produced
- Independent verifier
- Expected mismatch
- Local candidate registry
- baseline-a unchanged
Missing input
- Eksik input
Bu dalda zorunlu theme.css source girdisi yoktur. Eksik girdi, üretilmiş bir çıktının içerik kontrolünden kalmasıyla aynı durum değildir.
- Source inputs
- theme.css missing
- Local builder
- Builder not run
- Independent verifier
- Verifier not run
- Local candidate registry
- baseline-a only
- Set kontrolü
Builder declared input set’i kontrol eder; old archive varmış gibi candidate reuse yapılmaz.
- Source inputs
- theme.css missing
- Local builder
- Input set checked
- Independent verifier
- Verifier not run
- Local candidate registry
- baseline-a only
- Build durur
Required input yokken build stops ve candidateCreated=false kalır; partial output ready değildir.
- Source inputs
- theme.css missing
- Local builder
- Build stops: missing
- Independent verifier
- Verifier not run
- Local candidate registry
- baseline-a only
- Gate koşulmaz
Candidate olmadığından verifier çalıştırılmaz; not-run sonucu passed olarak okunamaz.
- Source inputs
- theme.css missing
- Local builder
- Build stops: missing
- Independent verifier
- Verification not run
- Local candidate registry
- baseline-a only
- Yeni candidate yok
Yerel registry baseline’ı korur; oluşmamış output için hash veya deployment sonucu yazılmaz.
- Source inputs
- theme.css missing
- Local builder
- Build stops: missing
- Independent verifier
- Verification not run
- Local candidate registry
- baseline-a unchanged
Runtime config
- Bytes sabit
Aynı static package digest’i korunur; public runtime config bu package byte’larından ayrı bir girdidir. Config decoder henüz READ_ONLY değerini değerlendirmedi.
- Source inputs
- Static package fixed
- Local builder
- Public config supplied
- Independent verifier
- Parser not run
- Local candidate registry
- Deployment absent
- Text input
Supplied READ_ONLY value false bir string’dir; native check process environment veya .env okumaz.
- Source inputs
- Static package fixed
- Local builder
- Public config supplied
- Independent verifier
- false text observed
- Local candidate registry
- Deployment absent
- Typed gate
Selected parser exact false text’ini false boolean’a çevirir; generic truthiness kullanılmaz.
- Source inputs
- Static package fixed
- Local builder
- Public config supplied
- Independent verifier
- Typed false accepted
- Local candidate registry
- Deployment absent
- Alternate config seçimi
Local builder alternate public true text’ini ayrı input olarak seçer; verifier’ın önceki typed false sonucu henüz değişmez, static package bytes aynı kalır.
- Source inputs
- Static package fixed
- Local builder
- Alternate true supplied
- Independent verifier
- Typed false accepted
- Local candidate registry
- Deployment absent
- Alternate typed kontrol
Independent verifier seçilmiş true text’ini typed true’ya çevirir; builder’ın input seçimi ve static package bytes bu yerel adımda değişmez.
- Source inputs
- Static package fixed
- Local builder
- Alternate true supplied
- Independent verifier
- Typed true accepted
- Local candidate registry
- Deployment absent
- Scope ayrılır
Yerel config parsing sonucu kaydedilir. Server startup, release approval veya deployment bu akışta gerçekleşmez.
- Source inputs
- Static package fixed
- Local builder
- Alternate true supplied
- Independent verifier
- Typed true accepted
- Local candidate registry
- Local only / no release
ROLLER · STATE · VERİ AKIŞI
Source, build output ve environment farklı kanıt taşır
Development, test, staging ve production adları kalite sonucu değildir. Development değişiklik üretir; test seçilen davranışı kontrol eder; staging release candidate’ı daha temsilî configuration ve dependency’lerle inceleyebilir; production kullanıcıya hizmet verir. Aynı ortam adı iki projede aynı izolasyon veya data policy’sini garanti etmez. Staging’de geçen bir kontrol, production secret’larının, network policy’nin, traffic load’un veya migration state’inin aynı olduğunu göstermez.
Source code’un kimliği ile build output’un byte kimliği ayrıdır. Build, belirlenmiş input’ları toolchain ve seçeneklerle işleyerek HTML render, TypeScript transform, CSS processing, resource copy veya package oluşturma gibi çıktılar üretir. Bir source değişikliği her artifact’ı değiştirmeyebilir; aynı source da farklı toolchain veya config ile farklı output verebilir. Bu yüzden source revision, dependency ve tool sürümleri, build seçenekleri ve output digest birlikte kaydedilir. SHA-256 byte kimliğini karşılaştırır; tek başına builder’a güven veya release izni sağlamaz.
Bu örnekte public-note.json ve theme.css input’larından index.html ve site.css üretilir. ZIP entry sırası ve timestamp değerleri sabitlendiğinde tekrarlanan build aynı byte digest’i verir. Yerel kontrol geçici dizinde dosyaları yazar; bağımsız HTML parser title’ı okurken archive entry’leri ve CSS byte’ları ayrıca incelenir. Bu, dar bir deterministik build örneğidir. Bütün toolchain’lerin reproducible olduğunu, gerçek repository build’inin veya deployment’ın çalıştığını göstermez.
Bundling, CI/CD ve configuration hangi aşamada etkili?
Bundling, entry point’ten başlayan imported dependency graph’ını işleyerek output’lara bağlar; basit file concatenation veya ZIP packaging ile aynı iş değildir. Minification representation boyutunu etkilerken bundling code ve dependency düzenini değiştirir. esbuild’in Bundle seçeneği recursive import’ları inlining ile birleştiren somut bir örnektir. External import’lar veya compile time’da çözülemeyen import’lar runtime dependency olarak kalabilir. Bu dersin ZIP örneği static dosyaları paketler; esbuild çalıştırmaz.
CI, değişiklikleri shared repository’ye sık entegre edip her integration için build ve test kontrollerinden hızlı feedback alma pratiğidir. Tek bir gece build’i veya automation job’ı bu sıklığı kendiliğinden sağlamaz. CD terimi bağlam ister: continuous delivery release candidate’ı hazırlar, release kararı ayrı kalabilir; continuous deployment ise policy’den geçen değişikliği otomatik production’a taşıyabilir. GitHub workflow içindeki job, runner ve step bu yapının bir provider örneğidir. Artifact kaydı veya yeşil job, release gate’in bütün kapsamını tek başına kanıtlamaz. Burada aşamalar yerel candidate defterinde izlenir; dağıtım yapılmaz.
Environment configuration build time’da browser’a gönderilen byte’lara gömülebilir veya runtime’da server tarafından okunabilir. Browser’a teslim edilen public config sır saklama alanı değildir. Node dotenv değerleri string olarak yorumlar; false metnini genel truthiness ile boolean sanmamak gerekir. Örnekte READ_ONLY için yalnız true ve false metinlerini kabul eden ayrı parser kullanılır; process environment veya .env dosyası okunmaz. İki runtime config aynı static artifact digest’ine eşlik edebilir. Hash eşitliği tek başına davranış eşitliği sağlamaz.
2. Red · Güven ve etki
Hareket olmadan bütün senaryoları oku
İçerik gate’i
- Public input set’i
public-note.json Tea note, theme.css ise verilen style bytes’ını taşır. Output set’i yalnız index.html ve site.css; source ve artifact aynı nesne değildir.
- Candidate ledger
- Two inputs / two output entries
- Verification gate
- Henüz değerlendirilmedi
- Local promotion sonucu
- Henüz değerlendirilmedi
- İçerik check farkı
GateFailed expectedTitle Coffee note, actualTitle Tea note. Builder’ın HTML üretebilmesi independent content beklentisinin geçtiği anlamına gelmez.
- Candidate ledger
- Two inputs / two output entries
- Verification gate
- Coffee expected / Tea actual / verified false
- Local promotion sonucu
- Henüz değerlendirilmedi
- Baseline’ı koru
Failed verifier promoted false bırakır ve baseline-a korunur. Local alias production route değildir; bu sonuç bir deploy veya rollback çalıştırıldığı iddiası taşımaz.
- Candidate ledger
- Two inputs / two output entries
- Verification gate
- Coffee expected / Tea actual / verified false
- Local promotion sonucu
- Failed candidate / baseline-a retained
- Digest’in sorusu
Normal output digest’leri exact byte identity’yi bağlar. Manifest ve output birlikte kontrolsüz değişirse digest trusted source veya release authorization üretmez.
- Candidate ledger
- Byte identity ≠ trusted provenance
- Verification gate
- Coffee expected / Tea actual / verified false
- Local promotion sonucu
- Failed candidate / baseline-a retained
- Entry allowlist’i
Archive entry listesi index.html/site.css ile sınırlı. Source note, expectation veya secret’ın bundle’a katılması hash eşleşse bile packaging contract’ını bozabilir.
- Candidate ledger
- Byte identity ≠ trusted provenance
- Verification gate
- Only index.html / site.css allowed
- Local promotion sonucu
- Failed candidate / baseline-a retained
- Gate sonucu ayrı
Normal verified true candidate-a olarak kaydedilir, fakat deployed false. İçerik check’i ve exact artifact bağı local sonucu açıklar; yayın izni bunlardan türetilmez.
- Candidate ledger
- Byte identity ≠ trusted provenance
- Verification gate
- Only index.html / site.css allowed
- Local promotion sonucu
- Verified local candidate / deployed false
Input ve config
- Eksik required input
MissingInput theme.css bulunmadığında candidateCreated false ve verificationRun false. Eski dosya adının görünmesi yeni candidate’ın üretildiğini söylemez.
- Candidate ledger
- theme.css missing / no new candidate
- Verification gate
- Henüz değerlendirilmedi
- Local promotion sonucu
- Henüz değerlendirilmedi
- Başarı default’u ekleme
Verifier hiç çalışmadığında passed sonucu yazılamaz. Missing input, compile failure ve content mismatch farklı gate’ler; aynı fail sözcüğü bilgi kaybı yaratabilir.
- Candidate ledger
- theme.css missing / no new candidate
- Verification gate
- Not run ≠ check passed
- Local promotion sonucu
- Henüz değerlendirilmedi
- Candidate yokluğunu koru
Bu branch’te archive candidate yok. Baseline bytes’ını yeni output saymak input coverage boşluğunu gizler; actual digest ve existence birlikte tutulmalı.
- Candidate ledger
- theme.css missing / no new candidate
- Verification gate
- Not run ≠ check passed
- Local promotion sonucu
- No candidate / baseline not a new build
- Boolean string farkı
READ_ONLY false string’i parsedReadOnly false; alternateText true ise true. Nonempty string truthiness’i bu public config için doğru typed parser’ın yerine geçmez.
- Candidate ledger
- String false → false / true → true
- Verification gate
- Not run ≠ check passed
- Local promotion sonucu
- No candidate / baseline not a new build
- Aynı package ayrı davranış
SameStaticPackage true iken config davranışı değişebilir. Config public ve processEnvironmentRead false; bu model server secret, vault veya gerçek runtime startup kanıtı değildir.
- Candidate ledger
- String false → false / true → true
- Verification gate
- Static identity same / config semantics differ
- Local promotion sonucu
- No candidate / baseline not a new build
- Üç sınırı koru
Input existence, independent verification ve typed config ayrı tutulur. Static-file package bir JS module bundler değildir; esbuildExecuted false bu ayrımı korur.
- Candidate ledger
- String false → false / true → true
- Verification gate
- Static identity same / config semantics differ
- Local promotion sonucu
- Inputs / verification / config distinct
VARSAYIM · SINIR · KONTROL
Başarılı build’i onaylı release sanmak
Build command’ın exit code 0 ile bitmesi yalnız o command’ın başarılı olduğunu söyler. Bağımsız kontrol çalışmamış, farklı artifact incelenmiş veya release approval ayrı bir aşamada kalmış olabilir. Böyle bir candidate’ı hazır release saymak gate kapsamını yanlış anlatır. Failed check dalında builder geçerli HTML üretir, fakat verifier beklenen Coffee note ile okunan Tea note farkını görür ve promotion’ı durdurur. Bu, source compilation failure’dan farklı bir sonuçtur.
Artifact hash’inin eşleşmesi authorization, source review veya provenance imzası sağlamaz. Manifest ile artifact kontrolsüz biçimde birlikte değişirse digest onları güvenilen origin’e bağlamaz. İncelenecek ilişki, hangi input ve config ile hangi output’un test edildiği ve aynı candidate’ın hangi policy’ye sunulduğudur. baseline-a ve candidate-a bu yerel defterin alias’larıdır; gerçek production route veya release pointer değildir.
Configuration sınırını bytes sınırı sanmak
Runtime config değiştiğinde static package aynı kalabilir; bu, application davranışının aynı kaldığını kanıtlamaz. Build time’da browser config içine konan secret da server-only kalmaz. Örnek yalnız public değerler ve bunları type bakımından denetleyen ayrı parser kullanır. Secret yönetimi WEB-16.02’deki lifecycle sınırlarına bağlıdır; environment adı veya .env syntax tek başına vault ya da rotation sağlamaz.
Missing input dalında builder gerekli theme.css dosyasını bulamaz ve archive candidate üretmez. Eski candidate filename’inin görünmesi yeni output üretildiğini göstermez. Kontrol input set’ini, candidate’ın varlığını, hesaplanan digest’i ve verifier sonucunu ayrı kaydeder. Geçici dosyalardan readback yararlı kanıttır; deployment, application startup, external dependency erişimi veya browser rendering bu sonuca eklenmez.
3. Blue · Güvenli geliştirme ve savunma
Hareket olmadan bütün senaryoları oku
Candidate controls
- Output bytes’ı tanı
Buradaki kayıtları yerel static-file builder, HTML title okuyucusu, hash hesabı ve typed config decoder üretir. GitHub workflow, production environment veya deployment log’u gözlenmez. Normal entries index.html ve site.css olarak kayıtlı. Her output digest’i ilgili bytes’a, package digest’i ise paketleme biçimine bağlı; hash türleri birbirinin yerine geçmez.
- Input/output manifest
- Two output digests + package identity
- Bağ ve içerik review’ü
- Henüz değerlendirilmedi
- Gate evidence
- Henüz değerlendirilmedi
- İçerik gözlemi
ParsedTitle Tea note ve normal verified true. Digest equality aynı bytes sorusunu, title check doğru içerik sorusunu yanıtlar; ikisini birlikte candidate-a’ya bağlarız.
- Input/output manifest
- Two output digests + package identity
- Bağ ve içerik review’ü
- Title Tea note / candidate-a verified
- Gate evidence
- Henüz değerlendirilmedi
- Olumsuz kontroller
Coffee expectation verified false ve promoted false; missing theme.css için verification çalışmaz. İki olumsuz örnek aynı rejected release sonucunun farklı nedenlerini korur.
- Input/output manifest
- Two output digests + package identity
- Bağ ve içerik review’ü
- Title Tea note / candidate-a verified
- Gate evidence
- Mismatch vs missing input distinct
- Repeatability kapsamı
RepeatSameBytes verilen builder ve input için true. Bu gözlem dış dependency supply chain, signed provenance veya bütün repository build’inin reproducible olduğunu kanıtlamıyor.
- Input/output manifest
- Selected repeat bytes / broader provenance absent
- Bağ ve içerik review’ü
- Title Tea note / candidate-a verified
- Gate evidence
- Mismatch vs missing input distinct
- Config influence kaydı
Runtime config static package’dan ayrı bağlanır. READ_ONLY parse sonucu public string comparison’dır; process environment veya production policy’nin uygulanması diye kaydedilmez.
- Input/output manifest
- Selected repeat bytes / broader provenance absent
- Bağ ve içerik review’ü
- Config identity separate from static bytes
- Gate evidence
- Mismatch vs missing input distinct
- Dar local receipt
Entry allowlist, bytes, title ve verifier sonucu aynı candidate record’da kalır. Bu ledger deployed false tutar; local pass public activation’a dönüşmez.
- Input/output manifest
- Selected repeat bytes / broader provenance absent
- Bağ ve içerik review’ü
- Config identity separate from static bytes
- Gate evidence
- Local evidence bound / publication separate
Identity kaydı yok
- Tek build success
Buradaki kayıtları yerel static-file builder, HTML title okuyucusu, hash hesabı ve typed config decoder üretir. GitHub workflow, production environment veya deployment log’u gözlenmez. Review yalnız build success mesajını görüyor; input manifest ve output digest yok. Hangi candidate’ın içerik check’inden geçtiği bu mesajla belirlenemez.
- Input/output manifest
- Build success / candidate identity missing
- Bağ ve içerik review’ü
- Henüz değerlendirilmedi
- Gate evidence
- Henüz değerlendirilmedi
- Beklentiyi gerçek sayma
Normal packageSha256 bilinen fixture’a ait. Eksik olayın digest alanına bunu eklemek, incelenmeyen output’u aynı candidate gibi gösterir.
- Input/output manifest
- Build success / candidate identity missing
- Bağ ve içerik review’ü
- Expected digest ≠ missing output evidence
- Gate evidence
- Henüz değerlendirilmedi
- Promotion belirsizliği
Bu kayıtta verifier run, gate result ve promoted state UNKNOWN. Compile success kadar bilgi korunuyor; approval veya deployment sonucu eklenmiyor.
- Input/output manifest
- Build success / candidate identity missing
- Bağ ve içerik review’ü
- Expected digest ≠ missing output evidence
- Gate evidence
- Verifier/promotion/deployment UNKNOWN
- Gerekli candidate bağı
Input bytes/hash, builder identity, config influence ve output digest gerekli. Independent check sonucu aynı output’a bağlanmalı; filename tek başına exact identity değildir.
- Input/output manifest
- Needed: input/builder/config/output/check
- Bağ ve içerik review’ü
- Expected digest ≠ missing output evidence
- Gate evidence
- Verifier/promotion/deployment UNKNOWN
- Gate contradiction kontrolü
Selector verified false iken promoted true tutarsızlığını arar. Zero matches missing record için sağlıklı release kanıtı değildir; observation coverage ayrıca gerekir.
- Input/output manifest
- Needed: input/builder/config/output/check
- Bağ ve içerik review’ü
- Contradiction absent ≠ complete coverage
- Gate evidence
- Verifier/promotion/deployment UNKNOWN
- Sonraki kanıtın sorusu
Yeni record hangi candidate’ın neyi geçtiğini yanıtlamalı. Bu olay için yalnız build mesajı korunur; byte/source bağı kurulmadan release başarı iddiası eklenmez.
- Input/output manifest
- Needed: input/builder/config/output/check
- Bağ ve içerik review’ü
- Contradiction absent ≠ complete coverage
- Gate evidence
- Collect exact candidate/check binding
UYGULAMA · GÜVENLİK KONTROLÜ · DOĞRULAMA
Test edilen candidate’ın kimliğini sabitle
Buradaki kayıtları yerel static-file builder, HTML title okuyucusu, hash hesabı ve typed config decoder üretir. GitHub workflow, production environment veya deployment log’u gözlenmez. Input manifest’i, builder kimliğini, config’in etkisini ve output digest’i aynı candidate kaydında ilişkilendir. Gerekli input eksikse candidate üretimini durdur; partial output’u hazır release gibi gösterme. Örnek title ve CSS için belirlenmiş dosyaları kullanır. Tekrarlanan build aynı byte’ları verirken sıradan bir title değişikliği index ve package digest’ini değiştirir. HTML parser’ın okuduğu title içerik beklentisini, hash ise kontrol edilen byte’ların kimliğini yanıtlar.
Archive entry allowlist ile package’a yalnız planlanan dosyaların girdiğini kontrol et. Bu örnekte index.html ve site.css vardır; source notları, test beklentileri veya secrets package’a eklenmez. Dependency cache ile release artifact farklı ömürler taşır. Cache yokken build input’ları yeniden edinilebilmeli; release kaydı ise hangi output’un incelendiğini korumalıdır. Static dosya paketinin kontrolü bir module bundler’ın dependency graph’ını işlemesini ölçmez.
Gate sonucu ve publication state’i ayrı tut
Candidate’ın geçtiği, check’in başarısız olduğu, input’un eksik kaldığı ve config’in uyuşmadığı sonuçları ayrı tut. Yerel build sonucu deployment yapıldığı anlamına gelmez. READ_ONLY parser’ında false metni boolean false olur, beklenmeyen metin reddedilir. Bu yerel type kontrolüdür; Node process.env okuması veya production policy enforcement ölçümü değildir. Config’in string semantics’i ile uygulamanın verdiği karar ayrı değerlendirilir.
Build candidate’ın kontrolü ile onu aktif route’a almak farklı state transition’lardır. Release kararı environment policy’sini, rollback hedefini ve aynı candidate için doğrulama sonucunu birlikte kullanır. Bu yerel defter gerçek deployment yapmaz. Selector failed verifier ile promoted=true tutarsızlığını arar; missing verifier kaydı başarılı release kanıtı değildir.
ŞİMDİ VAKAYA UYGULA
Aynı package hash’i başarılı release anlamına gelir mi?
İki public input’tan index.html ve site.css üretiliyor. Tea note içeriği doğru candidate’a bağlanırken Coffee note bekleyen check başarısız kalıyor. Static package aynı olsa bile READ_ONLY string’inin false veya true yorumlanması farklı runtime davranışı tarif ediyor.
Vakadaki data journey’yi environment, dependency ve telemetry context’iyle birlikte değerlendir. Bir operational success etiketi bütün application sonuçlarını kanıtlar mı?
Bağlı vaka dosyasını aç ↗ÖRNEĞİ BİRLİKTE OKUYALIM
Source ve static artifact karar defteri
Bir alan seç; hangi sonucu desteklediğini ve nerede yetersiz kaldığını incele.
Ham kaydı ve alan açıklamalarını oku
{
"environments": {
"development": "author changes",
"test": "selected assertions",
"staging": "representative release-candidate review",
"production": "serves users; not activated here"
},
"inputs": {
"public-note.json": "{\"title\":\"Tea note\"}",
"theme.css": "body { color: #222; }\n"
},
"outputs": {
"index.html": "<!doctype html><html lang=\"en\"><head><link rel=\"stylesheet\" href=\"site.css\"></head><body><h1>Tea note</h1></body></html>",
"site.css": "body { color: #222; }\n"
},
"normal": {
"entries": [
"index.html",
"site.css"
],
"packageSha256": "23d0b6423be7f017c5578ccf073562921fe645210e2f0703e1ee2162d7c61a05",
"outputSha256": {
"index.html": "a16a5f8c563d184509983d42d01daa3fdf60fbf6d549f071b2c06204b4a3e9c0",
"site.css": "117f85041fb8bb248011e3ade19c2f8b567e9b4cbaa9cb9e9bb4fb3cabc8367e"
},
"repeatSameBytes": true,
"parsedTitle": "Tea note",
"verified": true,
"recordedLocalCandidate": "candidate-a",
"deployed": false
},
"gateFailed": {
"expectedTitle": "Coffee note",
"actualTitle": "Tea note",
"verified": false,
"promoted": false,
"localBaseline": "baseline-a"
},
"missingInput": {
"required": "theme.css",
"candidateCreated": false,
"verificationRun": false
},
"runtimeConfig": {
"READ_ONLY": "false",
"parsedReadOnly": false,
"alternateText": "true",
"alternateReadOnly": true,
"sameStaticPackage": true,
"configIsPublic": true,
"processEnvironmentRead": false
},
"bundling": {
"dependencyGraphExample": {
"entry": "main-demo",
"imports": [
"label-demo"
],
"labelDemoImports": []
},
"nativeFixture": "static-file packaging, not a JS module bundler",
"esbuildExecuted": false
},
"limits": {
"repositoryBuildRun": false,
"githubWorkflowRun": false,
"deploymentRun": false,
"browserRenderRun": false,
"secretRead": false,
"signedProvenanceVerified": false
},
"selector": {
"language": "XPath",
"xml": "<audit><candidate verified=\"false\" promoted=\"false\"/></audit>",
"xpath": "count(/audit/candidate[@verified='false' and @promoted='true'])",
"expected": 0,
"positiveFixtureXml": "<audit><candidate verified=\"false\" promoted=\"true\"/></audit>",
"positiveExpected": 1,
"scope": "Own inert decision observations, not vendor log fields.",
"missingFieldBehavior": "Missing observation is insufficient evidence; zero matches alone proves no healthy runtime/control."
}
}- inputs/outputs
- Public source byte’ları ile üretilen HTML/CSS byte’ları.
- normal/gateFailed
- Byte kimliği ve bağımsız içerik kontrolü farklı kararları gösterir.
- runtimeConfig/bundling
- Runtime config ayrı değerlendirilir; static ZIP packaging, JavaScript bundling değildir.
- selector/limits
- Yerel karar gözlemleri; repository build’i, deployment veya gerçek secret okuması yok.
Geçici dosyalarda çalışan static builder, HTML parser, ZIP ve hash kontrolleriyle sınırlıdır. Repository build’i, gerçek module bundler, GitHub workflow, deployment, runtime server veya browser rendering çalıştırılmaz.
İki yanlış kanı
Başarılı build ve eşleşen artifact hash’i, onaylanmış deployment demektir.
Build sonucu, kontrol edilen byte’lar, verifier sonucu ve release approval ayrı kanıtlar gerektirir.
Aynı artifact hash’i her environment’da aynı davranışı garanti eder.
Runtime config ve dependency’ler değişebilir; config type’ları ve uygulama yetkileri ayrıca değerlendirilir.
SIRA SENDE
Bu hikâyeyi sen çöz.
Sonucu tahmin et, kanıtın sınırını bul ve nedenini kendi cümlenle anlat.
Beklenen başlık Coffee note, fakat package içinden Tea note okunuyor. Bu candidate mevcut baseline’ın yerine geçer mi?
- Evet. Package oluştuysa bütün acceptance koşulları sağlanır.
- Hayır. verified=false; promoted=false.
Gerekçeli cevabı oku
Hayır. verified=false; promoted=false. — İstenen başlık eşleşmediği için doğrulama başarısızdır. baseline-a korunur; package üretmek tek başına release onayı değildir.
Bu kayıt reproducible package ve gerçek deployment hakkında ne gösteriyor?
Dersten seçilen artifact alanları; öğretim örneği
- normal.entries
- ["index.html","site.css"]
- normal.repeatSameBytes
- true
- normal.verified
- true
- normal.deployed
- false
- Tekrar aynı byte’lar üretilmiş; doğrulama geçmiş, deployment yapılmamış.
- SHA eşleştiği için production kullanıcıları bu sürümü almıştır.
Gerekçeli cevabı oku
Tekrar aynı byte’lar üretilmiş; doğrulama geçmiş, deployment yapılmamış. — repeatSameBytes=true ve verified=true yerel candidate’ı açıklar. deployed=false olduğu için bunu production yayını sayamayız.
READ_ONLY değeri "false" string’i, alternateText "true". Aynı static package neden iki farklı runtime davranışı için kullanılabilir?
Gerekçeli cevabı oku
String’in dolu olması boolean true demek değildir. Bu örnek "false" için parsedReadOnly=false, "true" için alternateReadOnly=true üretir. Config değişse de sameStaticPackage=true kalabilir. Buradaki config public’tir; gerçek process environment veya secret okunmaz. Static file packaging de gerçek JS module bundler çalışması değildir.
□ String ile parse edilmiş boolean’ı ayırdım.
□ Package byte’larının aynı olmasını runtime config’in aynı olması saymadım.
Uygulama konsolunu aç · request / response / browser
Request, URL, cookie ve DOM örneklerini ayrıca aç
Kaynaklar ve kapsam
- GitHub Docs — WorkflowsAbout workflows · Workflow basics · Workflow triggers
- GitHub Docs — Workflow artifactsAbout workflow artifacts · Artifacts versus dependency caching · Generating artifact attestations for builds
- GitHub Docs — Managing environments for deploymentOpening paragraphs: deployment protection rules · Creating an environment · How environments relate to deployments
- esbuild — APIBuild · Bundle · Non-analyzable imports
- Node.js v26.11.1 — Environment Variablesprocess.env · Variable Values
- Python 3.14 — hashlibUsage · Constructors
- GitHub Docs — Continuous integrationAbout continuous integration · About continuous integration using GitHub Actions
- GitHub Docs — Continuous deploymentAbout continuous deployment · About continuous deployment using GitHub Actions
- Martin Fowler — Continuous Delivery (historical definition, 2013; updated 2014)Opening definition and indicators · Continuous Delivery versus Continuous Deployment (paragraph starting Continuous Delivery is sometimes confused)