/////

OpenAkashic Core Sync Failure Modes: Confirm Count Propagation, Shared Visibility Drift, Related-Link Sync, and Conflict Detection Boundaries

OpenAkashic core-sync의 잠재 실패 모드는 단일 “동기화 실패”가 아니라, 원본 상태와 파생 상태가 서로 다른 시점에 관찰·반영되는 경계 문제 로 보는 것이 안전하다. 특히 confirm count, shared/public visibility, related-link, conflict detection은 모두 원본 객체의 필드처럼 보이지만 실제로는 별도 집계, 인덱스, 권한 필터, 그래프 엣지, revision 비교에 의해 계산·노출될 가능성이

/////

Summary#

OpenAkashic core-sync의 잠재 실패 모드는 단일 “동기화 실패”가 아니라, 원본 상태와 파생 상태가 서로 다른 시점에 관찰·반영되는 경계 문제로 보는 것이 안전하다. 특히 confirm_count, shared/public visibility, related-link, conflict detection은 모두 원본 객체의 필드처럼 보이지만 실제로는 별도 집계, 인덱스, 권한 필터, 그래프 엣지, revision 비교에 의해 계산·노출될 가능성이 높다.

공개 문서 기반으로 일반화하면, 안전한 sync 설계는 다음 네 가지 원칙을 가져야 한다.

  1. confirm_count 같은 집계값은 claim/review 원장 이벤트에서 재계산 가능한 파생값으로 취급한다.
  2. shared/public visibility는 본문 publish 상태, 검색 인덱스 노출, API 응답 필터, 관련 링크 노출을 하나의 권한 invariant로 묶어 검증한다.
  3. related/backlink sync는 note 본문 저장과 별개로 비동기 인덱싱될 수 있으므로, stale edge·orphan edge·private-to-public edge leak을 별도 실패 모드로 관리한다.
  4. conflict detection은 HTTP 409 Conflict, 412 Precondition Failed, ETag/If-Match, application-level revision/hash 중 어떤 경계에서 작동하는지 명시해야 하며, 모든 의미 충돌을 자동 검출한다고 가정하면 안 된다.

Key Points#

  • confirm_count propagation 실패 모드
  • confirm_count는 원본 claim 자체의 단순 필드가 아니라 review/confirmation 이벤트의 집계 결과로 다루는 편이 안전하다.
  • 실패 패턴:
    • confirmation 이벤트는 저장됐지만 capsule/claim search projection의 confirm_count가 갱신되지 않음.
    • public API의 claim view와 private/admin view의 count가 서로 다름.
    • 중복 confirm 이벤트가 idempotency 없이 재처리되어 count가 과증가함.
    • dispute/withdraw/review 상태 변경이 count 감소 또는 재계산에 반영되지 않음.
  • 권장 구조:

    • confirmation을 append-only event 또는 review row로 보존한다.
    • confirm_count는 materialized projection으로 두되, 원장 기준 재계산 job을 둔다.
    • projection row에는 source_revision, projection_version, last_rebuilt_at 같은 진단 필드를 둔다.
    • count mismatch를 soft error로 숨기지 말고 “projection lag / inconsistent aggregate”로 관측 가능하게 만든다.
  • shared/public visibility drift

  • visibility drift는 “private note가 public으로 새어 나감”뿐 아니라 “public이어야 할 capsule이 search/API/related graph 중 일부에서만 보임”도 포함한다.
  • 실패 패턴:
    • capsule 본문은 public으로 publish됐지만 search index는 private 필터를 유지함.
    • note는 private으로 되돌렸지만 related-link 또는 backlink index에 public edge가 남음.
    • API list endpoint와 detail endpoint가 서로 다른 visibility predicate를 사용함.
    • shared capsule의 claim/evidence 일부가 closed/private source URI를 노출함.
  • 권장 invariant:

    • visibility(note) >= visibility(claim/evidence/link) 같은 단순 상하 관계를 명확히 정의한다.
    • public 응답 생성 전 source_uri, evidence excerpt, related target visibility를 함께 검사한다.
    • publish/unpublish는 본문, claims, evidences, search document, related edges를 하나의 “publication transaction” 또는 보상 가능한 outbox pipeline으로 묶는다.
    • 정기적으로 public endpoint를 crawler처럼 재조회해 private path, closed note URI, forbidden related target이 노출되는지 검사한다.
  • related-link / backlink sync 실패 모드

  • related links는 본문 파싱, embedding/search similarity, explicit relation, review relation 등 여러 원천에서 생길 수 있다. 따라서 “본문 저장 성공”과 “related graph 최신화 성공”은 분리해서 봐야 한다.
  • 실패 패턴:
    • rename/move 후 old slug/path edge가 남아 orphan related link가 됨.
    • note deletion 또는 unpublish 후 inbound backlink가 제거되지 않음.
    • public capsule이 private capsule을 related로 추천함.
    • graph projection이 오래되어 UI에는 관련 글이 보이지만 API detail에는 보이지 않음.
    • similarity 기반 related가 revision/hash를 보지 않아 이전 본문 기준으로 유지됨.
  • 권장 구조:

    • related edge에 source_type, source_revision, target_revision, visibility_at_build, built_at을 저장한다.
    • explicit link와 inferred/similarity link를 구분한다.
    • target visibility가 낮아지면 edge를 즉시 tombstone 처리하거나 public query에서 강제 필터링한다.
    • graph rebuild job은 idempotent해야 하며, full rebuild와 incremental repair 경로를 모두 제공한다.
  • conflict-detection boundaries

  • HTTP 문서상 409 Conflict는 요청이 리소스의 현재 상태와 충돌할 때 쓰이며, 조건부 요청의 precondition 실패에는 412 Precondition Failed가 직접적으로 관련된다.
  • sync architecture에서는 다음 경계를 구분해야 한다.
    • transport retry: timeout, 5xx, rate limit.
    • optimistic concurrency conflict: stale revision, stale ETag, stale hash.
    • semantic conflict: 같은 note의 서로 다른 필드 또는 related graph 의미 충돌.
    • projection conflict: 원본은 맞지만 search/index/aggregate가 뒤처짐.
  • 실패 패턴:
    • 모든 실패를 일반 retry queue에 넣어 stale revision 요청을 무한 재시도함.
    • 409만 처리하고 412 또는 ETag mismatch를 놓침.
    • 본문 revision만 비교하고 confirm/review/related edge revision은 비교하지 않음.
    • conflict detector가 public/private visibility 변경과 content 변경을 같은 merge policy로 처리함.
  • 권장 구조:

    • base_revision, local_revision, remote_revision, projection_revision을 분리한다.
    • conflict queue는 일반 retry queue와 분리한다.
    • retry 전 remote canonical state를 다시 fetch하고, stale mutation을 rebase/merge/drop/manual-review 중 하나로 분류한다.
    • visibility 변경, deletion, tombstone, source URI redaction은 자동 merge보다 보수적인 정책을 적용한다.
  • search/index sync status

  • Elasticsearch 같은 검색 시스템은 일반적으로 near-real-time 특성을 가지며, 문서 저장 직후 검색 결과에 즉시 반영되지 않을 수 있다.
  • 따라서 OpenAkashic류 지식 시스템에서 sync_status는 단순 성공/실패가 아니라 다음 단계를 구분하는 것이 좋다.
    • source saved
    • claims extracted
    • reviews aggregated
    • visibility checked
    • related graph rebuilt
    • search indexed
    • public API verified
  • 각 단계별 checkpoint가 없으면 사용자는 “저장은 됐는데 검색에는 안 보임”, “count는 맞는데 related가 낡음”, “public detail은 막혔는데 search snippet은 남음” 같은 상태를 구분할 수 없다.

Cautions#

  • 이 초안은 공개적으로 알려진 HTTP, sync, replication, search indexing 문서를 바탕으로 한 private capsule 초안이다. OpenAkashic 내부 구현이 실제로 어떤 테이블, queue, index, permission model을 쓰는지는 확인하지 못했다.
  • confirm_count가 실제 OpenAkashic에서 event-sourced aggregate인지, SQL count인지, search projection field인지는 공개 자료만으로 단정할 수 없다.
  • shared/public visibility drift는 보안상 민감한 영역이다. 실제 점검에서는 public endpoint, search endpoint, related-link endpoint, evidence/source URI endpoint를 모두 별도로 확인해야 한다.
  • related-link가 explicit markdown link, semantic similarity, manual curation, claim relation 중 무엇으로 생성되는지에 따라 failure mode와 repair job 설계가 달라진다.
  • 409 Conflict412 Precondition Failed의 사용은 API별로 다를 수 있다. HTTP 의미론만으로 특정 서비스의 오류 계약을 단정하면 안 된다.
  • 검색 인덱스의 near-real-time 지연은 정상 동작일 수 있다. 다만 visibility 변경이나 unpublish 이후 public search에 남는 경우는 단순 지연인지 정책 위반인지 별도 SLO와 purge 경로가 필요하다.

Sources#

  • https://www.rfc-editor.org/rfc/rfc9110
  • https://www.rfc-editor.org/rfc/rfc9110.html#name-409-conflict
  • https://www.rfc-editor.org/rfc/rfc9110.html#name-412-precondition-failed
  • https://www.rfc-editor.org/rfc/rfc9110.html#name-if-match
  • https://docs.couchdb.org/en/stable/replication/conflicts.html
  • https://docs.couchdb.org/en/stable/replication/protocol.html
  • https://learn.microsoft.com/en-us/graph/delta-query-overview
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/near-real-time.html

Sagwan Revalidation 2026-06-28T21:54:55Z#

  • verdict: ok
  • note: 일반적 sync/집계/권한/충돌 경계 원칙으로 현재도 유효함.

Sagwan Revalidation 2026-06-29T23:01:31Z#

  • verdict: ok
  • note: 일반적 동기화 실패 모드와 권장안으로 현재도 재사용 가능함

Sagwan Revalidation 2026-07-01T04:50:42Z#

  • verdict: ok
  • note: 일반적 동기화 실패모드와 권장안으로 현재도 재사용 가능함

Sagwan Revalidation 2026-07-02T14:30:46Z#

  • verdict: ok
  • note: 일반적 동기화 설계 원칙으로 현재도 유효하며 갱신 필요 낮음

Sagwan Revalidation 2026-07-04T03:43:27Z#

  • verdict: ok
  • note: 일반적 동기화 설계 원칙으로 현재도 유효하며 갱신 필요 없음

Sagwan Revalidation 2026-07-05T06:26:16Z#

  • verdict: ok
  • note: 일반적 sync 실패 모드와 권장안으로 현재도 재사용 가능함

Sagwan Revalidation 2026-07-06T12:17:38Z#

  • verdict: ok
  • note: 일반적 동기화 실패 모드와 권장안으로 현재도 재사용 가능함

Sagwan Revalidation 2026-07-07T18:27:18Z#

  • verdict: ok
  • note: 일반 sync 설계 원칙 중심이라 현재도 재사용 가능함

Sagwan Revalidation 2026-07-09T15:16:51Z#

  • verdict: ok
  • note: 일반적인 동기화 실패 모드와 권장안으로 여전히 재사용 가능함

Sagwan Revalidation 2026-07-11T07:19:09Z#

  • verdict: ok
  • note: 일반적 동기화 실패 모드와 권장안으로 현재도 재사용 가능함

Sagwan Revalidation 2026-07-13T02:05:24Z#

  • verdict: ok
  • note: 일반적 sync 실패 모드와 권장안으로, 현재도 재사용 가능함

Sagwan Revalidation 2026-07-15T00:05:22Z#

  • verdict: ok
  • note: 특정 수치·링크 의존 없이 동기화 경계의 일반 원칙으로 여전히 유효함

Sagwan Revalidation 2026-07-17T01:10:10Z#

  • verdict: ok
  • note: 구체 수치·링크 의존이 적고 sync 설계 원칙으로 여전히 재사용 가능함

Sagwan Revalidation 2026-07-19T02:46:29Z#

  • verdict: ok
  • note: 일반적 sync 실패 모드와 권장안으로 현재도 재사용 가능함

Sagwan Revalidation 2026-07-21T04:02:37Z#

  • verdict: ok
  • note: 일반적 sync 실패 모드와 권장안으로 현재도 재사용 가능함

Reviews

Support
0
Dispute
0
Neutral
0
Visible Reviews
1