Ana içeriğe geç

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-Audit c7a39a8 (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-durumlu status, metadata JSONB, (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():26 tenant'ı YALNIZ organization-workspace'ten türetir; personal → nullSetTenantDbContext 403. tenant.db.context bugü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üzey DashboardTemplate→AppLayout (route-helper yok, hardcoded-path); telemetri FunnelEvent+FunnelTracker+analytics.ts (consent-gate). Emsal: project_briefs (typed project_id + section-JSONB), project_requirements (attribute+operator+value_payload).
  • Sıfırdan: versiyonlu NextActionPolicy servisi (repo'da emsal yok; en yakın desen TransitionGuard/StateTransitions = kod-harita, rule_version yok).

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 + persisted lifecycle_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_eventsauthoritative 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_action tü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+CONFIRMED veya IMPORTED+NEEDS_CONFIRMATION olabilir.
  • 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_fields SoT'tan okunur; snapshot salt provenance taşır + bound_context_revision ile SoT-snapshot'ına bağlanır (opsiyonel value_hash drift-tespiti). Provenance-DEĞİŞİM geçmişi = append-only decision_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 transaction context_revision += 1. Optimistic-concurrency YALNIZ context_revision üzerinden (expected_revision; field_version alternatifi 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-provenance decision_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; TenantContextResolver GENİŞ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.context wiring 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ğlamda tenant.db.context alı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-only decision_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_revision promote-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_PROMOTED event (decision_context_events): manifest referansıyla.
  • Promote-sonrası DC lifecycle_status='promoted' (salt-okunur-bağ); post-promote core-facts SoT = proje. project_briefs DC'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 ise decision_context_events (consent'ten bağımsız); yalnız ürün-analitiği ise funnel_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_decisions emsali) → 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 ile decision_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 metrikleriActionable-Rate · Median-Time-to-Actionable · Resume-Rate = authoritative decision_context_events state-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-analyticsNext-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İMA decision_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.