İçeriğe geç

Tekrar keşfi ve canonical seçim mimarisi

Geliştirme · 0.0.0-dev

Yayın

Doküman
0.0.0-dev
Uygulama
0.0.0

Bu sayfa

Uygulama
0.0.0
Şema
f8-010
Veri
repetitions-v1

Tekrar katmanı, aynı veya benzer pasajların corpus içindeki bağımsız geçişlerini ilişkilendirir. Metni deduplicate etmez. Her kitap, chapter, paragraf, cümle ve token occurrence kendi kaynak konumunda kalır; tekrar kayıtlarının tamamı silinse bile core release aynı byte’larla reconstruct edilebilir.

Normatif model ADR-009’da, core/annotation sınırı ADR-001’de ve ortak seçim geometrisi yapısal annotation rehberinde tanımlanır. Bu rehber, accepted F6 uygulamasının fiziksel durumunu ve review sırasında korunacak sınırları operasyonel sırayla açıklar.

flowchart LR
  accTitle: Tekrar verisinin authority akışı
  accDescr: Immutable core metni shared selectionlara, selectionlar exact occurrence ve classlara, ayrı candidate ve diff evidenceına, optional reviewed canonical seçime ve private readerlara bağlanır.
  core[immutable core release] --> anchor[span ve selection]
  profile[versioned repetition profile] --> occurrence[passage occurrence]
  anchor --> occurrence
  occurrence --> exact[exact class]
  occurrence --> candidate[pending candidate]
  candidate --> diff[replayable diff]
  exact --> choice[reviewed canonical choice]
  exact --> reader[private exact reader]
  reader --> api[release-pinned public exact projection]
  choice -. yayınlanmadı .-> reader

Bu akış dört ayrı soruyu cevaplar:

Soru Authority Otomatik karar verebilir mi?
Metnin neresi seçildi? anchor_control span/selection Exact geometry doğrulanabiliyorsa evet
İki seçim exact eşit mi? Profile-qualified exact evidence Certified build içinde evet
İki farklı seçim aynı pasajın varyantı mı veya biri alıntı mı? Reviewed semantic relation Hayır; insan review gerekir
Hangi geçiş önerilen navigation hedefi? Reviewed canonical choice Hayır; seçim olmaması geçerlidir

Normalization, MinHash skoru, lexical kök, Osmanlıca rendering ve diff özeti ilk iki seçimi bulmaya yardım edebilir. Bunların hiçbiri exact equality, repeat family, quotation veya canonical tercih authority’si değildir.

  • repetition_control, public core’a FK ile bağlanır; core tablosu repetition tablosuna bağlanmaz.
  • passage_occurrence replacement text saklamaz. Exact prose her zaman selection_id üzerinden core’dan reconstruct edilir.
  • Aynı visible metnin iki geçişi iki ayrı occurrence ID’sidir. Eşitlik exact_class membership’inde ifade edilir.
  • Canonical seçim yalnız bir navigation tavsiyesidir; text source, alias, redirect, deduplication talimatı veya translation alignment değildir.
  • Nested ve overlapping seçimler geçerlidir. Geometri tek başına semantic membership, quotation veya canonical ilişki üretmez.
  • Published package entity’leri immutable’dır. Algoritma, profile, kaynak release veya member seti değişirse eski ID güncellenmez; successor release/entity çıkar.

F6-012 disposable fixture’ı canonical create, supersede ve retire işlemlerinden önce ve sonra iki bağımsız text version’ın tüm core fingerprint’ini, exact reconstruction’ını, hierarchy kimliklerini ve token inventory’sini karşılaştırdı. Constraint veya trigger bypass kullanılmadan eşitlik korundu. Bu, bir İngilizce release ya da alignment yayımlamaz; yalnız repetition curation’ın metin authority’sine dönüşemediğini kanıtlar.

repetition-scope-policy-v1 dört immutable profile bağlanır:

Projection Enumerator Predicate Dominance
full_context_v1 whole_paragraph_v1 exact_passage_bytes structural_units
full_context_v1 sentence_run_2_12_v1 exact_sentence_sequence maximal_only
prose_only_v1 whole_paragraph_v1 exact_passage_bytes structural_units
prose_only_v1 sentence_run_2_12_v1 exact_sentence_sequence maximal_only

Profile; core release/root, text version, coordinate profile, analysis projection, enumerator, exact predicate, annotation treatment ve dominance kuralını identity fact olarak taşır. Runtime’da bir filter değiştirerek başka profile elde edilmez.

exact_passage_bytes unnormalized UTF-8 pasaj witness’ını, exact_sentence_sequence ise ordered exact sentence digestlerini ve separatorları karşılaştırır. NFC, case, apostrof, noktalama veya whitespace folding exact preimage’a giremez. Digest yalnız indexleme yapar; class kurulmadan önce gerçek length/member/byte eşitliği doğrulanır.

prose_only_v1 içinde accepted heading marker veya note body ile kesişen bütün enumerated occurrence excluded olur; extent kırpılmaz. Dahil kalan occurrence’larda yalnız note marker byte’ları comparison preimage içinde typed, length-delimited note_marker_v1 boundary ile değiştirilir. Core byte’ları ve occurrence extent’i değişmez. excluded bir profile sonucudur; metnin corpus’tan çıkarıldığı anlamına gelmez.

Accepted migration zinciri private repetition_control şemasını kullanır.

Relation grubu Amaç Permanence/authority
identity_packages UUIDv5 identity release ve input/path manifest closure Immutable package authority
repetition_profiles Dört profile’ın exact scope ve predicate binding’i Immutable policy instance
repetition_releases, repetition_release_profiles Profile, inventory, partition ve evidence root’larını tek release’te bağlar Immutable publication
passage_occurrences Shared selection’ın profile-qualified repetition kullanımı ve sonuç durumu Immutable occurrence annotation
exact_classes, exact_class_members Certified exact equivalence ve ordered complete member inventory Immutable exact authority
repeat_candidate_profiles, repeat_candidate_endpoints, repeat_candidates Near/variant discovery feature ve pair evidence’ı Immutable, pending_review; semantic authority yok
passage_diffs, passage_diff_operations Ordered endpointler arasında replayable exact-coordinate edit script Immutable evidence
canonical_choice_policies Editorial canonical seçim politikası Immutable domain policy
exact_class_curation_endpoints, canonical_choice_curation_endpoints Repetition entity’lerini shared curation/provenance sistemine bağlar Immutable control bridge
canonical_choices, canonical_choice_events UUIDv7 seçimler ile replacement/retirement history Append-only reviewed authority
canonical_choice_applications, canonical_choice_requests Atomic apply ve idempotent operation audit’i Append-only audit
canonical_choice_working_heads Bir class/policy için rebuildable current state cache’i Tek mutable derived head

Tablo sahipliği ile çağırma yetkisi aynı şey değildir. Migration’ların kabul ettiği sınır şöyledir:

Rol Sahiplik/yetki Sahip olmadığı yetki
munderecat_repetition_owner Login olmayan sealed owner; repetition_control schema, relation, trigger ve routine’lerinin sahibidir Runtime, review veya migration oturumu değildir
munderecat_anchor_owner Shared anchor tablolarının sahibidir; publication sırasında repetition staging seçimlerini anchor authority’sine yazar Repetition class/candidate/canonical authority’sini yönetmez
prod_migrator publish_repetition_anchors_from_staging, publish_repetition_from_staging ve publication verifier’ı kontrollü release işleminde çağırır Repetition tablolarına doğrudan DML veya reader erişimi yoktur
curation_executor Canonical curation endpoint’ini hazırlar ve current state root’u hesaplar apply_canonical_choice_v1 execute hakkı activation adapter kurulana kadar yoktur; exact/candidate tablolarını değiştiremez
auditor Private tabloları, publication verification’ını, canonical review member listesini ve üç bounded exact reader’ı salt okunur inceler Publication, canonical apply veya public API yetkisi yoktur
munderecat_api_owner Accepted exact release’i API manifestine bağlar; dar public-safe projection fonksiyonlarını çağırır Private candidate, diff, benchmark veya canonical working state okuyamaz
anon, authenticated, app_runtime Yalnız api_v1.get_chapter_repetitions_v1 ve api_v1.list_repetition_members_v1 public envelope’larını çağırır repetition_control tablo ve private reader erişimi yoktur

public, anon, authenticated ve app_runtime bu private yüzeylerin hiçbirini çağıramaz. Owner rolün SECURITY DEFINER routine’e sahip olması caller’a owner üyeliği vermez; migration sonunda geçici owner edge’leri geri alınır. Private reader’lar ayrıca SECURITY INVOKERdır ve yalnız açık auditor grant’iyle çalışır.

Release’in exact coverage universe’ü matched, evaluated_unique, excluded, not_evaluated ve failed kümelerine ayrılır. Boş satır “unique” demek değildir. Accepted F6 release’te exact_status = complete, semantic_status = opendır:

  • 2.678.256 passage occurrence,
  • 443.332 matched exact-class member,
  • 192.797 exact class,
  • 1.843.526 evaluated-unique occurrence,
  • 391.398 profile-qualified exclusion,
  • 2.202 pending near/variant candidate,
  • 2.202 replayable diff ve 14.233 diff operation,
  • sıfır exact processing failure.

Candidate publication yalnız gerçekten kullanılan 3.727 endpoint witness’ını saklar; kullanılmayan comparison node inventory’si DB’yi şişirmez. Exact coverage complete olsa bile 2.202 candidate semantic review beklediği için semantic status open kalır.

ADR-009 gelecekteki tam modeli de tarif eder. Aşağıdaki ayrım uygulama kodu için zorunludur:

Yetenek Durum Bugün güvenilir kaynak
Exact paragraph ve 2-12 sentence-run discovery Uygulandı ve accepted F6-002/F6-003 evidence
Heading/note-aware full-context ve prose-only projection Uygulandı ve accepted F6-004 evidence
Near-candidate generation ve replayable passage diff Uygulandı, evidence-only F6-005/F6-006 artifacts
Stable occurrence/class identity Uygulandı F6-007 package contract
Atomic private PostgreSQL publication Uygulandı ve isolated full run ile doğrulandı F6-008 report
False-positive/positive benchmark 17 accepted fixture; benchmark-only F6-010 fixture
Exact-class canonical choice schema/lifecycle Kurulu fakat apply activation kapalı F6-009 migration
Private exact lookup ve chapter annotation reader Uygulandı; yalnız auditor F6-011 migration
Canonical choice’in reader’da yayımlanması Henüz yok Her row not_published döner
Reviewed repeat_family Henüz tablo/release yok ADR-009’da reserved
Directed quotation_relation Henüz tablo/release yok ADR-009’da reserved
Public api_v1 exact repeat endpointleri Uygulandı; release-pinned ve bounded F8-010 migration
User-facing exact işaret ve diğer konumlar Uygulandı; texti sarmayan start marker F8-010 web reader
User-facing variant/canonical işaretleri Henüz yok Reviewed publication’a deferred

“Near candidate var” ifadesi “variant family var” anlamına gelmez. Benzer şekilde benchmark label’ı production disposition, suppression rule veya curation kararı değildir.

  1. Core package ve annotation release root’ları profile’a bağlanır.
  2. Finite enumerator her in-scope paragraph veya 2-12 sentence run selection’ını source order ile çıkarır.
  3. Exact predicates bütün work universe’ünü değerlendirir; exact class ve dominance evidence’ı üretir.
  4. Stable identity compiler profile, occurrence, class ve release UUIDv5 path’lerini package release key altında üretir.
  5. Near generator normalized token features ile candidate çıkarabilir; passage diff exact endpoint witness’ları arasında replay edilir.
  6. Publisher zstd streamlerini temporary staging’e alır, FK/root/count/identity ve partition closure’ı doğrular; shared anchor ve repetition satırlarını tek transaction’da yayımlar.
  7. Candidate ve diff satırları pending_review kalır. Otomatik threshold semantic relation veya canonical seçim üretemez.
  8. Private reader yalnız accepted exact relationları release ID ile okur; candidate, benchmark, private provenance ve canonical working head okumaz.

Runtime legacy SQLite, ad hoc rapor, normalized-text fallback veya untracked candidate dosyası okuyamaz.

Canonical policy editorial-primary-placement-v1dir. Bir exact class için geçerli durum başlangıçta unselecteddır. İlk/uzun/en yüksek skorlu member otomatik seçilmez.

Review akışı şöyledir:

  1. ensure_exact_class_curation_endpoint_v1 exact class için lazy curation target kaydını oluşturur.
  2. list_canonical_choice_review_members_v1 immutable member order’ını ve current state’i en fazla 100 satırlık sayfalarda verir. Passage prose taşımaz; yetkili review aracı selection/core reader üzerinden metni ayrıca çözer.
  3. Proposal exact target, expected state root, action bytes, rationale, evidence ve UUIDv7 successor ID’sini freeze eder.
  4. En az iki distinct, yetkili non-author approval aynı proposal bytes’ına bağlanır.
  5. Apply işlemi class membership, core witness, review roots, stale state, idempotency key ve transition’ı tek transaction’da doğrular.

Üç action vardır:

Action Ön koşul Sonuç
create State unselected, successor member class içinde Yeni immutable choice, state selected
supersede Expected current choice eşleşir Yeni choice + replacement event; eski choice çözülür kalır
retire Expected current choice eşleşir Retirement event; state tekrar unselected

apply_canonical_choice_v1 bugün installed_but_not_activated durumundadır. Trusted authority/signature adapter; reviewer capability, revocation, epoch, freeze ve lane state kontrollerini sağlamadan curation_executor execute hakkı alamaz. Disposable fixture’ın owner ile lifecycle çalıştırması production activation değildir.

Accepted exact relationlar üç bounded fonksiyonla okunur:

select * from repetition_control.get_passage_repeat_context_v1(
:repetition_release_id, :passage_occurrence_id
);
select * from repetition_control.list_exact_repeat_members_v1(
:repetition_release_id, :exact_class_id, :after_member_position, :limit
);
select * from repetition_control.list_chapter_repeat_annotations_v1(
:repetition_release_id, :chapter_id,
:after_document_position, :after_occurrence_id, :limit
);

İlk fonksiyon exact_repeat, evaluated_unique veya excluded durumunu açıkça döndürür. İkinci fonksiyon immutable class-member position ile sayfalar. Üçüncü fonksiyon yalnız prose_only_v1 ve structural_unit/maximal exact annotationları source order ile verir; nested ve overlap kayıtlarını birleştirmez.

Bu fonksiyonlar SECURITY INVOKERdır ve yalnız auditor tarafından çağrılabilir. public, anon, authenticated ve app_runtime denied durumdadır. Passage prose, pending candidate, diff, benchmark label veya private canonical working state döndürmez. F8-010 bu private authority’yi doğrudan açmaz; API owner’a ait ayrı, SECURITY DEFINER public-safe projectionlar üzerinden yalnız accepted exact alanları release envelope, exposure manifest ve generated client types ile yayımlar.

API v1.7 iki işlem ekler:

select api_v1.get_chapter_repetitions_v1(:chapter_id, :deployment_id);
select api_v1.list_repetition_members_v1(
'exact_class', :exact_class_id, :cursor, :page_size, :deployment_id
);

get_chapter_repetitions_v1, pinned repetition release’teki yalnız prose_only_v1 ve structural_unit/maximal exact occurrence’ları döndürür. Her kayıt stable occurrence/class/selection ID’lerini, exact member sayısını ve ordered shared span geometrisini taşır. Span texti canonical core sentence’dan yeniden çıkarılır ve immutable span hash’iyle doğrulanır. Bir chapter en fazla 1.000 görünür annotation ve 16 MiB response sınırındadır.

list_repetition_members_v1, exact class member position’ını signed opaque cursor ile en fazla 100 satır sayfalar. Sonuç yalnız chapter, optional paragraph, start/end sentence ve kısa excerpt gibi navigasyon alanlarını taşır. repeat_family isteği repeat_family_not_published olarak unavailable döner; pending adaylardan family uydurulmaz. Canonical publication alanı public shape’ta yoktur.

API manifesti accepted F6 exact release’in mevcut root’larından deterministik bir repetition_publication_root_sha256 üretir. Aktivasyon exact discovery veya 2,6 milyon occurrence sayımı yapmaz; pinned complete release, core root ve selef API deployment bağını doğrular. Binding ve deployment immutable/idempotenttir.

Web okuyucu passage textini wrap etmez ve render unit bölmez. Her cümleye sabit sentence-<uuid> anchor’ı, aynı noktada başlayan exact kayıtlar için sıfır genişlikli tek marker yerleştirir. Panel current occurrence’ı ayırır ve diğer member’ları chapter anchor’ına bağlar. Repeat endpointi kullanılamazsa Latin, Osmanlıca, lügat, heading ve note okuyucuları aynen çalışır.

Gözlenen sorun Doğru düzeltme Yapılmaması gereken
Exact olmayan iki member aynı class’ta Compiler/profile integrity incident; successor repetition release Class member satırını update/delete etmek
Exact tekrar bulunmamış Enumerator/profile/source evidence’ını düzeltip successor release üretmek Normalized search sonucunu exact diye eklemek
Near candidate false positive Immutable pending_review evidence’ını korumak; bugün yalnız F6-010 benchmark label’ıyla test etmek, gelecekte ADR-007 uyumlu curation ile disposition yayımlamak Benchmark label’ını production kararı saymak veya candidate’i global text kuralıyla silmek
Aynı pasajın varyantı Gelecek ADR-007 repeat-family review’u ile complete member seti kabul etmek Pairwise similarity edge’lerini transitively cluster etmek
Bir pasaj diğerini alıntılıyor Gelecek directed quotation review’u ve exact extent İki pasajı symmetric family yapmak
Canonical tercih yanlış supersede veya retire Class/occurrence ID’sini ya da metni değiştirmek
Core kaynak düzeltildi Yeni core/text version ve ona bağlı successor repetition release Eski occurrence selection’ını retarget etmek
Reader boş sonuç verdi Release ID ve explicit state/coverage’i incelemek Başka release’e veya normalized text’e fallback yapmak

Published occurrence ve class ID’leri atıf hedefi olabildiği için production’da “sil ve yeniden üret” curation yöntemi değildir. Disposable candidate worksetleri yeniden üretilebilir; accepted identity, membership ve manual choice history typed supersession ile yaşar.

Değişikliğin etkilediği katmanı çalıştırın:

Terminal window
make repetition-exact-paragraph-check
make repetition-exact-sentence-sequence-check
make repetition-annotation-projection-check
make repetition-near-duplicate-check
make repetition-passage-diff-check
make repetition-stable-identity-check
make repetition-identity-schema-check
make repetition-importer-check
make repetition-publication-schema-check
make repetition-canonical-choice-check
ruby -w tests/repetitions/false_positive_benchmark_test.rb
ruby scripts/repetitions/false_positive_benchmark.rb --verify
ruby -w tests/db/repetition_reader_test.rb
ruby -w tests/db/repetition_canonical_text_isolation_test.rb
make repetition-links-check
pnpm --filter @munderecat/web test

Bu komutlar sample/statik sözleşme sınırındadır. Full 2,6 milyon occurrence publication’ı, persistent DB veya full corpus her doküman/reader değişikliğinde yeniden çalıştırılmaz. Full gate yalnız source release, profile/enumerator, stable identity grammar, publication schema/importer ya da certified root’lar değiştiğinde tekrar gerekir.

Bir failure’da önce authority katmanını belirleyin: core reconstruction, anchor geometry, profile/exact evidence, candidate/diff evidence, curation lifecycle, publication closure veya reader projection. Alt katmanı üst katman sonucuna uydurmak yerine hatayı kendi authority’sinde düzeltin.