ADR: Karar-Bağlamı (Decision Context) Veri-Modeli, Provenance ve Aktif-Sonraki-Adım İskeleti
Durum: ACCEPTED (Human-CEO, 8 Tem 2026 — "ACCEPT — Alternatif B" @
27d5afc). Süreç: Müdür 2.-göz PASS (coordinator:message:019f3d4a) + AI-CEO derin-inceleme PASS-WITH-CHANGES (019f3dbe, 4-blocker+5-major) + REV2/REV3/REV4 + bağımsız Verify ACCEPT-READY (019f41d9) → CEO exact-SHA ACCEPT (künye: extensions.acceptance). KOD, ADR-kabulünden önce yazılmadı; DC-implementasyonu ayrı impl-brief (SHA-pin) bekler (Paket-A stale-cleanup tek-istisna, ayrı-onaylı). Grounding = Pre-Auditc7a39a8(eventinn repo gerçek-kod-izi, file:line). Kullanıcı-dili: ekran "Etkinlik Masası", nesne "Etkinlik Özeti"; "Decision Context" yalnız iç/domain ad ("Karar Kokpiti" düşürüldü — CEO 7 Tem).
Karar-Kapsamı (bu kabul NEYİ yetkilendirir?)
Kabul = HEDEF-MİMARİ + RELEASE-1 iskelet kabulüdür. ŞUNLARI YETKİLENDİRMEZ: RLS aktivasyonu üretimde · tenant.db.context global-wiring · org-DC runtime-route (ayrı güvenlik-gate — §5.5/§11) · promote-devri UI'ı · transfer/collaboration · venue-matching/discovery (RELEASE-2+) · production-deploy. Her biri AYRI gate (implementation-brief, CEO-onaylı, SHA-pin). Bu kabulden sonra kod = paket-paket (A ayrı-onaylı-tamam; sonra B/C/D/D2/D3/F0).
0. Temel hüküm
Karar-Bağlamı bir kayıt değil, bir karar-omurgasıdır. Kullanıcının etkinlik-niyeti; her alanı değeriyle birlikte kaynağını ve doğrulama-durumunu taşır; sistem bağlamdan test-edilebilir yararlı bir sonraki-adım üretir. Boş-satır değer değildir (İlk-Değer dürüstlüğü — CAN-REQ-RULE-007).
1. Karar sorusu
Kullanıcının etkinlik-niyeti düşük-taahhüt bir aşamada nasıl yapılandırılmış + kaynak-izlenebilir yakalanır; sistem bunu yararlı-kılarken (ne-eksik + anlamlı-sonraki-adım) mevcut proje/teklif/karar zincirini yeniden-kurmadan nasıl besler; ve bu bağlam personal-workspace'te tenant-RLS olmadan nasıl güvenceye alınır?
2. Bağlam — yer-gerçeği (salt-oku derin-dalış; Pre-Audit c7a39a8, file:line)
- Alan greenfield DEĞİL. CANLI demand-zincir:
projects → project_briefs → project_requirements → proposals → proposal_scores → award_decisions → bookings(tenant-RLS-izolasyonlu). - Örtüşme (crux-1): RELEASE-1 brief'inin "typed sıcak çekirdek" listesi
create_projects_table.php'de ~%80 mevcut:tenant_id+workspace_id+planner_user_id,event_type_id,start_date/end_date,guest_count_min/max,budget_min/max/currency,location_country/region/district_id, 6-durumlustatus,metadataJSONB,(tenant_id, workspace_id)RLS-hazır index. projects'in taşımadığı (Karar-Bağlamı'nın yeni-değeri): (a) alan-bazlı provenance (kaynak⊥doğrulama⊥güncellik); (b) unknowns + versiyonlu sonraki-adım servisi; (c) promote-öncesi düşük-taahhüt niyet-yüzeyi (personal-workspace, org-gerektirmez).- İzolasyon (crux-2):
TenantContextResolver::fromWorkspace():26tenant'ı YALNIZorganization-workspace'ten türetir; personal →null→SetTenantDbContext403.tenant.db.contextbugün hiçbir route'a bağlı değil (RLS dormant-hazır) —CAN-DEC-ADR-002§2/AMD-2 ile tutarlı. - Reuse hazır: UI
Card/Button/Badge/EmptyState+ StyleGuide + tasarım-token'ları; auth-yüzeyDashboardTemplate→AppLayout(route-helper yok, hardcoded-path); telemetriFunnelEvent+FunnelTracker+analytics.ts(consent-gate). Emsal:project_briefs(typedproject_id+ section-JSONB),project_requirements(attribute+operator+value_payload). - Sıfırdan: versiyonlu
NextActionPolicyservisi (repo'da emsal yok; en yakın desenTransitionGuard/StateTransitions= kod-harita,rule_versionyok).
3. KARAR METNİ (Alternatif 🅱 — KABUL EDİLEN; ACCEPTED @27d5afc, Human-CEO 8 Tem)
Karar-Bağlamı (Decision Context), mevcut proje-nesnesinden AYRI, düşük-taahhüt bir
ön-niyet/karar-omurgası katmanıdır. Mevcut projects+marketplace zinciri YENİDEN
KURULMAZ; Karar-Bağlamı onların ÖNÜNE düşer.
Karar-Bağlamı taşır: kimlik + core-facts + alan-bazlı PROVENANCE + persisted lifecycle_status
+ türetilen decision_maturity/actionability/continuity_mode projeksiyonları + unknowns +
versiyonlu next-action. "Her-şeyi-yutan-aggregate" DEĞİL: Requirements ⟂
Evidence ⟂ Actions ⟂ Marketplace-artifacts AYRI lifecycle, referansla bağlı.
PROMOTE: kullanıcı market'e-çıkmaya (RFP/discovery) hazır olduğu eşikte, Karar-Bağlamı'nın
core-facts'i mevcut projeye KOPYALANIR (promoted_project_id). Promote-öncesi source-of-truth
= Karar-Bağlamı; promote-anından sonra core-facts SoT = proje; Karar-Bağlamı provenance-geçmişi
korunur (salt-okunur bağ). Tek-SoT çakışması açık-promote ile önlenir.
recommendation ≠ mutation: next-action ADVISORY'dir; domain-gerçeğini sessizce değiştiremez
("AV'yi netleştir" önerisi bir alanı CONFIRMED yapmaz). Kullanıcı: dismiss/snooze/not_relevant/
completed.
RELEASE-1'de yapay-zekâ çıkarımı ÜRETİLMEZ: sistem-türevi öneri = SYSTEM_DERIVED +
NEEDS_CONFIRMATION + rule_version. Gerçek motor gelince AI_INFERRED + model_ref + derivation_ref.
KABUL: yön Human-CEO tarafından SEÇİLDİ (7 Tem) → exact-SHA ile KABUL EDİLDİ (8 Tem,
approved_by: human_ceo@27d5afc). Kabul-zinciri: AI-CEO 4-blocker+5-major kapanışı + REV2/3/4 + Müdür 2.-göz + bağımsız Verify + CEO exact-SHA. (accepted != effective — yürürlük ayrı kapı.)
4. İki-aşamalı karar (bağlayıcı sıralama)
- Aşama-1 (BU KABUL): veri-modeli + provenance-boyutları + SoT-hükmü + ACTIONABLE-invariant + FactRef + next-action-policy sözleşmesi + promote-manifest + personal-yetkilendirme-modeli. RELEASE-1 iskeleti bunları GÖSTERİR.
- Aşama-2 (AYRI gate'ler): stage/olay-otomasyonu (deploy→Temel · PR→Ekran · CI→Test · Verify→Kullanımda); promote-devri UI; org-DC runtime-route + RLS üretim-aktivasyonu; venue-matching. RELEASE-1'de otomasyon YOK — veri-modeli sonradan-olayla-set-edilebilir tasarlanır.
5. Hedef kavramsal model (bağlayıcı iskelet)
- Decision Context (root):
decision_contexts— kimlik + core-facts (typed, SoT) + ownership + persistedlifecycle_status+promoted_project_id(nullable) +context_revision BIGINT(monotonik concurrency-token — §5.2). (MINOR-fix:decision_maturity/actionability/continuity_mode= TÜRETİLİR, persisted-DEĞİL — §5.3; muğlak "current-decision-state" persisted-kavramı root'ta YOK.) - Decision Context Field:
decision_context_fields— long-tail/genişleyen alanların extensible modeli (field_key+value_payload). Core-facts BURADA DUPLİKE EDİLMEZ (§5.1 SoT-hükmü). - Fact provenance (current-snapshot):
decision_context_fact_provenance— her fact'in (core + long-tail) ŞU ANKİ kaynağı/doğrulama-durumu;fact_ref-anahtarlı ORTAK model (§5.2) — dual-write yok. - Decision Context Event (history):
decision_context_events— authoritative iş/audit append-only olay-günlüğü (consent'e bağlı DEĞİL, KAYBOLAMAZ; provenance-DEĞİŞİM geçmişi burada — §5.2/§5.7/§7). - NextActionPolicy: versiyonlu servis (kod, tablo değil) — bağlamdan
next_actiontüretir (§5.4).
5.1 🔴 Core typed field'lar + TEK-SoT hükmü (BLOCKER-2)
SoT-hükmü (bağlayıcı): Aşağıdaki core-facts YALNIZ decision_contexts root-kolonlarında yaşar (tek-SoT); decision_context_fields içine KOPYALANMAZ (dual-write/drift yasak):
objective · event_type_id(FK,null) · format(amaç⊥format AYRI) · location_scope(country/region/city) · date_window(start/end,null) · date_flexibility(exact/month/quarter/flexible) · attendee_min/attendee_max(null; tek-değer-değil — R8) · owning_workspace_id+tenant_id+created_by_user_id · lifecycle_status · promoted_project_id.
Long-tail requirements (AV·breakout·accommodation·catering·accessibility·logistics·stage·loading·security·sustainability) = decision_context_fields satırları (extensible; core-fact DEĞİL). Kolon-adları mevcut proje-tablosuyla HİZALI (promote-kopyası düşük-sürtünme). Bir fact ya core-root'ta ya field-store'da yaşar — asla ikisinde birden.
5.2 🔴 Provenance = kaynak ⊥ doğrulama ⊥ güncellik + concurrency (BLOCKER-2 fact-ref · MAJOR-5)
source_type ∈ {USER_PROVIDED, IMPORTED, SYSTEM_DERIVED, AI_INFERRED, EXTERNAL_SOURCE, VENUE_PROVIDED, ORGANIZATION_PROVIDED}.verification_state ∈ {NOT_ASKED, UNKNOWN, NEEDS_CONFIRMATION, CONFIRMED, CONFLICTING, NOT_APPLICABLE}.- Ortogonal: aynı bilgi
USER_PROVIDED+CONFIRMEDveyaIMPORTED+NEEDS_CONFIRMATIONolabilir. - UNKNOWN ≠ NOT_APPLICABLE: UNKNOWN = geçerli-ama-bilinmiyor (→ sor); NOT_APPLICABLE = bu-bağlamda-anlamsız (günlük-yerel-toplantıda-konaklama → sorma; unknowns/next-action'a GİRMEZ).
- 🔴 current-provenance = SNAPSHOT, history = EVENTS (SON-2): bir fact'in ŞU ANKİ source/verification'ı event-replay'den DEĞİL, current-snapshot tablosundan okunur:
decision_context_fact_provenance{ decision_context_id, fact_ref, source_type, verification_state, source_ref, captured_by, captured_at, verified_by, verified_at, derivation_ref, observed_at, valid_until, bound_context_revision, value_hash(opsiyonel) }+UNIQUE(decision_context_id, fact_ref). 🔴 GERÇEK-DEĞER snapshot'ta YOK (REV3-B1 — ikinci value-store yasağı, §5.1 tek-yer-hükmü + B5 ile tutarlı): değer YALNIZ core-root /decision_context_fieldsSoT'tan okunur; snapshot salt provenance taşır +bound_context_revisionile SoT-snapshot'ına bağlanır (opsiyonelvalue_hashdrift-tespiti). Provenance-DEĞİŞİM geçmişi = append-onlydecision_context_events(audit).fact_ref(§5.3) hem core-fact hem long-tail-field'i tek-tip referanslar (iki fact-ailesi, tek provenance-modeli). (kesin migration-adları impl-brief'te rafine olabilir; kavramsal-model bağlayıcı.) - 🔴 Concurrency = TEK revision-modeli (SON-1 · MAJOR-5): DC-root'ta monotonik
context_revision BIGINT; her fact-değiştiren transactioncontext_revision += 1. Optimistic-concurrency YALNIZcontext_revisionüzerinden (expected_revision;field_versionalternatifi KALDIRILDI — çift-model belirsizliği yok).decision_context_fields=UNIQUE(decision_context_id, field_key). Değer-güncelleme = tek-transaction:context_revision-artır +decision_context_fact_provenance-snapshot-güncelle + eski-provenancedecision_context_events'e append (+ varsa field-value). Kısmi-yazma yok; last-write-wins yok. - RELEASE-1:
AI_INFERREDüretilmez (M2 — motor yok).
5.3 🔴 FactRef namespace + ACTIONABLE invariant (BLOCKER-4 · Q9/R4)
FactRef (bağlayıcı namespace): next-action ve provenance bir fact'e tek-tip referansla bağlanır:
core.objective · core.event_type_id · core.format · core.location_scope · core.date_window · core.attendee_range · requirement.<domain>.<key> (ör. requirement.av.production_level · requirement.accommodation.room_block · requirement.catering.style). core.* = decision_contexts root; requirement.* = decision_context_fields.
ACTIONABLE_DECISION_CONTEXT invariant (makinece):
ACTIONABLE = context mevcut
∧ next_action.target_fact geçerli bir FactRef (core.* | requirement.*)
∧ next_action.reason_facts[] ≥1 mevcut fact'e FactRef ile dayanıyor
∧ next_action.reason_codes boş-değil
∧ next_action.type kullanıcının-gerçekleştirebileceği eylem
"bütçen ne?" tek-başına actionable-ilan-ETMEZ. Durum kalıcı-enum-saklanmaz; lifecycle_status + policy-çıktısından TÜRER (olgunluk ⊥ süreklilik iki-eksen).
5.4 NextActionPolicy (versiyonlu — Q8/R4)
Merkezî servis; Dashboard/bileşene if gala GÖMÜLMEZ. Girdi = fact-set (core + long-tail) + verification_state'ler. Çıktı: next_action{ target_fact:FactRef, reason_facts:[FactRef], reason_codes:[...], type, rule_version }. rule_version her çıktıda pinli (ör. brief-next-action-v1), deterministik, "neden bunu soruyorsun?" cevaplanabilir. İlk-sürüm rule-based. Emsal desen TransitionGuard/StateTransitions (ama rule_version yeni).
5.5 🔴 Personal-workspace yetkilendirme + RELEASE-1 runtime PERSONAL-ONLY (crux-2 · 🅐 · MAJOR-4)
- Personal-bağlam (RELEASE-1 runtime): erişim = app-level
owning_workspace.owner_user_id === current_user_id(RLS-403-lane'i DIŞINDA;TenantContextResolverGENİŞLETİLMEZ — 🅑 =CAN-DEC-ADR-002/AMD-2-etkili → ayrı-tur + Danışman 2.-göz gerektirir). - 🔴 RELEASE-1 runtime = PERSONAL-ONLY (MAJOR-4): org-DC schema/architecture-ready olabilir ama runtime-route AÇILMAZ bu release'te. İlk RLS-aktivasyonu /
tenant.db.contextwiring ayrı güvenlik-gate (İlk-Değer-release'ine GİZLİCE yüklenmez). Org-DC yüzeyi = ayrı CEO-onaylı implementation-brief (§11 kapsam-dışı). - Kurumsal-bağlam (gelecek): DC org-workspace'te doğduğunda ek-olarak tenant-RLS (doğarken-RLS'li —
CAN-DEC-ADR-002§7.1 Delta-A pozitif-kuralı); DC tenant-user route'ları org-bağlamdatenant.db.contextalır. Bu RELEASE-1 DIŞI. - Guest-devir bağı (
CAN-REQ-UCG-007): misafir/anonim başlanan bir Karar-Bağlamı, hesap-oluşunca owner'a bağlanır; devir append-onlydecision_context_events(DECISION_CONTEXT_OWNERSHIP_TRANSFERRED) + owner-ataması. (RELEASE-1 min: hesap-sonrası owner; guest-state KVKK-turu AYRI-kapı —CAN-REQ-SCN-002.)
5.6 🟠 Promote + source-of-truth devri (Q3/R6 · MAJOR-1)
decision_contexts.promoted_project_id (nullable FK → projects). Promote = açık kullanıcı-eylemi (eşik) ve transaction-sözleşmesi taşır:
promotion_manifest:{ source_decision_context_id, source_context_revision, target_project_id, idempotency_key, mapping_version, promoted_at }—source_context_revisionpromote-edilen DC-snapshot'ını PİNLER (§5.2 tek-revision-modeli; opsiyonel snapshot-hash).- Tek-transaction + all-or-nothing: core-facts projeye kopyalanır; kısmi-kopya YOK.
- DC-başına-tek-başarılı-promote: idempotency_key +
UNIQUE-guard; retry AYNI target_project'e döner (yeni-proje-üretmez), farklı-target reddedilir. - Append-only
DECISION_CONTEXT_PROMOTEDevent (decision_context_events): manifest referansıyla. - Promote-sonrası DC
lifecycle_status='promoted'(salt-okunur-bağ); post-promote core-facts SoT = proje.project_briefsDC'yi ikame ETMEZ (o yayın-sonrası RFP-detayı). RELEASE-1'de promote-UI YOK — alan/manifest/yön hazır, akış Aşama-2.
5.7 🔴 Domain-event ⊥ analytics-telemetry AYRIMI (BLOCKER-3)
İKİ AYRI olay-düzlemi, ASLA karışmaz:
decision_context_events= AUTHORITATIVE iş/audit (consent'e bağlı DEĞİL, KAYBOLAMAZ, append-only, business-truth):DECISION_CONTEXT_CREATED · DECISION_CONTEXT_FIELD_VALUE_CHANGED · DECISION_CONTEXT_BECAME_ACTIONABLE · DECISION_CONTEXT_RESUMED · DECISION_CONTEXT_PROMOTED · DECISION_CONTEXT_OWNERSHIP_TRANSFERRED · DECISION_CONTEXT_ARCHIVED · DECISION_CONTEXT_CANCELLED. Provenance-geçmişi + ownership + promote + state-milestone'lar burada. 🔴 Authoritative state-milestone'ları (REV3-B2):DECISION_CONTEXT_BECAME_ACTIONABLE {context_revision, rule_version, next_action_type, reason_codes, occurred_at}+DECISION_CONTEXT_RESUMED {decision_context_id, workspace_id, resume_reason, previous_access_at, occurred_at}— Median-Time-to-Actionable (created→ilk-actionable) + Resume-Rate bu milestone'lardan authoritative-türetilir (funnel-projection'a bağlı DEĞİL).funnel_events= NON-AUTHORITATIVE product-analytics projection (consent-gated, kaybolabilir):next_action_presented · next_action_clicked · dashboard_viewed · decision_context_became_actionable(analytics-projection). Metrik-türetme kaynağı; iş-gerçeği DEĞİL. Kural: bir olay audit/iş-gerçeği isedecision_context_events(consent'ten bağımsız); yalnız ürün-analitiği isefunnel_events(consent-gated). Aynı olay iki düzleme yazılabilir ama authoritative kopya daima decision_context_events.
6. Idempotency + silme-politikası
- Create idempotent (Q15):
idempotency_key(client-UUID;HasIdempotencyKey/award_decisionsemsali) → aynı-key mevcut-DC döner. Field-update = §5.2 optimistic-concurrency + tek-transaction (last-write-wins-DEĞİL). Retry-safe. - Boş-asset yasağı (Q16/RULE-007): DC ancak ≥1 anlamlı-alan (objective|event-type|konum) girilince oluşur. "Şimdilik atla" → context YARATMA + discovery-safe path (generic browse; M4 navigasyon-vaadi) (Q17).
- Lifecycle (Q18):
lifecycle_status ∈ {active, archived, cancelled, promoted}+ SoftDeletes. Hard-delete normal-akışta yok (KVKK-silme ayrı). CASCADE iledecision_context_events(authoritative audit) + provenance-geçmişi kaybedilmez.
7. Telemetri — domain-event ⊥ metric (Q20/R9 · BLOCKER-3'e bağlı)
Authoritative domain-event'ler (decision_context_events, consent-bağımsız): §5.7. Product-analytics (funnel_events REUSE, consent-gated, yeni-tablo-YOK): ekleme = funnel_events.chk_fe_event_type CHECK-genişletme (additive migration; alter_..._add_click_type emsali) + FunnelTracker yeni-method + consent-gate.
🔴 Metrik authoritative-kaynağı İKİYE AYRILIR (SON-3):
- İş/ürün-state metrikleri — Actionable-Rate · Median-Time-to-Actionable · Resume-Rate = authoritative
decision_context_eventsstate-milestone'larından (DECISION_CONTEXT_BECAME_ACTIONABLE/DECISION_CONTEXT_RESUMED, §5.7) + current-state'ten türer (consent'e bağlı DEĞİL; ürün-gerçeği yanlı olmaz). - Interaction-analytics — Next-Action-Presented/Clicked · Dashboard-Viewed · funnel-dropoff = consent-gated
funnel_events-projection'dan türer. Sayısal-hedef baseline-sonra. İş-metriği/audit gerektiğinde kaynak DAİMAdecision_context_events(funnel değil).
8. Resume (çoklu-context — Q10/R2)
Workspace 1→N DecisionContext (eşzamanlı çoklu-etkinlik). Her DC stable-UUID. Resume: last_accessible_decision_context_id erişilebiliyorsa (workspace-authz + soft-delete-dışı) aç; yoksa Etkinlik Masası → aktif-DC listesi → güvenli-fallback. Resume ≠ tek-context-aç. Erişilebilirlik her-login re-check. RELEASE-1'de "ne değişti?" YOK (sahte-değişiklik gösterme).
9. Değerlendirilen alternatifler
- 🅐 Mevcut projeleri genişlet: tek-tablo; ama yayınlanmış-RFP lifecycle'ı erken-niyetle kirlenir + proposal-zinciri yan-etki → red (seam-ihlali).
- 🅱 Ayrı ön-katman + promote (KABUL EDİLEN — ACCEPTED @
27d5afc): yukarıdaki model; reuse-first + tek-SoT açık-promote. Human-CEO SEÇTİ (7 Tem) → exact-SHA ile KABUL EDİLDİ (8 Tem; accepted-ADR). - 🅲 Projelerin draft-substatus'u: ayrı-tablo-yok; ama provenance+unknowns+next-action projeye sığmaz → red (şişme).
"Çözümü önceden-seçme" ilkesi korunur: A/C gerçek trade-off'larıyla kayıtlı; 🅱 = seçilen-yön (gerekçe §3), kabul CEO exact-SHA'da.
10. Karar-dayanak sırası
(1) EventInn İlk-Değer senaryosu (CAN-REQ-SCN-002) + FV1 use-case'leri · (2) reuse-first + seam-disiplini (paralel-sistem-icat-yasağı) · (3) provenance/güvenlik-invariant'ları · (4) mevcut-kod-gerçekliği (Pre-Audit) · (5) migration-maliyeti · (6) dış-ürün/CMS (Karar-Bağlamı = EventInn-özgün; CMS-emsal-yok, Danışman-2.göz ekseni).
11. Kapsam-DIŞI (ayrı gate/ADR)
Venue Discovery/matching (RELEASE-2) · Compare/Shortlist kriter-Fit/Evidence production-UI (RELEASE-3; mockup ④ yalnız önizleme) · What-Changed/alerts (RELEASE-4) · transfer/collaboration-UI · AI-inference-motoru · org-DC runtime-route + ilk RLS-aktivasyonu (MAJOR-4 — ayrı güvenlik-gate, RELEASE-1'e yüklenmez) · TenantContextResolver personal-genişletme (🅑, ayrı-tur+Danışman) · promote-devri-UI. Speculative production-UI KURULMAZ (ölü-CTA yok; sözleşmeler hazır).
12. legacy/ilişki
CAN-DEC-ADR-002 (kimlik/tenant-izolasyon) = zemin; Karar-Bağlamı onun workspace/tenant/ownership modelini TÜKETİR, çelişmez (personal=owner-guard, org=tenant-RLS ama RELEASE-1-dışı). Klasik eventinn ADR emsalleri kod-desen olarak legacy-ADR-087(öğe-katmanı), legacy-ADR-092(TransitionGuard), legacy-ADR-095(seam-disiplini) — bu ADR onlarla tutarlı, additive.
13. Kabul-kriterleri — İKİ AYRI DÜZLEM (MAJOR-3; circular-gate kırıldı)
13.A · ADR-ACCEPTANCE kriterleri (bu ADR'nin exact-SHA kabulü için — implementasyon-öncesi)
A1. Pre-Audit gerçek-kod-izli (c7a39a8) + alternatifler (🅐/🅱/🅲) trade-off'lu. A2. Alt-B kararı + selected-direction≠accepted ayrımı net. A3. SoT-hükmü (core=decision_contexts, long-tail=fields, dual-write-yasak) yazılı. A4. Provenance 2-boyut (source⊥verification) + UNKNOWN≠NOT_APPLICABLE. A5. FactRef namespace + ACTIONABLE-invariant makinece-tanımlı. A6. Domain-event⊥analytics ayrımı (authoritative decision_context_events ⊥ consent-gated funnel_events). A7. Promote-manifest sözleşmesi (idempotent+tek-transaction+append-only). A8. Personal-only runtime + org-DC ayrı-gate hükmü. A9. recommendation≠mutation. A10. exact-SHA pin + CEO onayı.
13.B · RELEASE-1 IMPLEMENTATION-ACCEPTANCE kriterleri (kod sonrası — ayrı gate, ADR-kabulü DEĞİL)
B1. DC ≥1 anlamlı-alan girilmeden satır-üretmez. B2. "Şimdilik atla" context-yaratmaz. B3. create idempotent (aynı-key tek-satır). B4. context_revision monotonik + optimistic-concurrency (expected_revision; last-write-wins-yok); decision_context_fields UNIQUE(decision_context_id, field_key); decision_context_fact_provenance UNIQUE(decision_context_id, fact_ref). B5. core-fact field-store'da DUPLİKE değil + provenance-snapshot GERÇEK-DEĞER taşımaz (değer yalnız core/fields SoT'tan; SoT DB-testi). B6. next_action FactRef-target + reason_facts + reason_code + rule_version. B7. ACTIONABLE-invariant makinece-doğrulanır. B8. domain-event decision_context_events'e (consent-bağımsız; DECISION_CONTEXT_BECAME_ACTIONABLE/DECISION_CONTEXT_RESUMED milestone'ları dahil) + analytics funnel_events'e (consent-gated) AYRI yazılır; state-metrik milestone'lardan authoritative-türer. B9. promote tek-transaction + idempotent + append-only DECISION_CONTEXT_PROMOTED. B10. personal-DC yalnız owner_user_id okur; org-DC runtime-route AÇILMAMIŞ (RELEASE-1). B11. Resume: last-accessible-varsa-aç/yoksa-liste/güvenli-fallback. B12. a11y (semantic/keyboard/focus/renk-tek-değil); ölü-CTA yok. B13. exact-SHA bağımsız-Verify (prod-smoke) doğrular. B14. panel/telemetri sahte-sayı/sahte-AI/sahte-onay göstermez.
İzlenebilirlik
upstream: CAN-REQ-SCN-002 (İlk-Değer senaryosu — kapsam) + CAN-REQ-UCG-008 (FV1 birincil use-case-kümesi; governance_status: accepted — lint ADR-upstream-gate'i KARŞILANIYOR, bu yüzden record accepted-oldu). governed_by: CAN-GOV-UCDEP-001. related: CAN-DEC-ADR-002 (zemin) · CAN-REQ-SCN-002 · CAN-REQ-UCG-007 (guest-devir) · CAN-REQ-UCG-008/CAN-REQ-UCG-009/CAN-REQ-UCG-010/CAN-REQ-UCG-011 (FV1; UCG-010 karar-varlığını DC'ye bağlar + Brief-Seed) · CAN-REQ-RULE-007 (İlk-Değer dürüstlüğü). Pilot-scope = extensions.scope_summary+related_ucgs (paket-üretmeyen descriptive alan; bu ADR PILOT-SLICE-FV1 paketine ÜYE DEĞİL). Kaynak-otorite = bu Canon-kaydı; analiz-detayı Pre-Audit c7a39a8.
CAN-DEC-ADR-003 · decisions/normative · governance_status: accepted (Human-CEO exact-SHA ACCEPT 8 Tem @27d5afc; süreç: Müdür 2.-göz + AI-CEO PASS-WITH-CHANGES + REV2/3/4 + bağımsız Verify) · pilot: FV1 (scope_summary) · AMD-1 accept-truth-sync uygulandı · accepted != effective.