Skip to content

confluence-mdx: reverse-sync target identity를 엄격하게 검증합니다#1032

Open
jk-kim0 wants to merge 1 commit into
jk/fix-reverse-sync-input-gatesfrom
jk/fix-reverse-sync-provenance-identity
Open

confluence-mdx: reverse-sync target identity를 엄격하게 검증합니다#1032
jk-kim0 wants to merge 1 commit into
jk/fix-reverse-sync-input-gatesfrom
jk/fix-reverse-sync-provenance-identity

Conversation

@jk-kim0

@jk-kim0 jk-kim0 commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Summary

push-eligible planning에서 provenance가 없는 normalized text prefix target 선택을 제거합니다.

  • offline diagnostic fixture는 기존 list text fallback을 유지합니다.
  • online verify는 최초 candidate, determinism 재생성, idempotency 재계획 모두 allow_text_identity_fallback=false를 강제합니다.
  • provenance mapping을 찾지 못하면 no_mapping으로 기록하고 intent_complete gate에서 block합니다.
  • tool version을 reverse-sync-cli-v4로 올려 과거 manifest의 재검증을 요구합니다.
  • OpenSpec planner/renderer migration boundary와 task를 갱신합니다.

Why

normalized text prefix는 중복 list나 유사 content에서 다른 XHTML fragment를 선택할 수 있습니다. 진단 경로에서는 fixture migration을 위해 유지할 수 있지만, remote update를 허용하는 proof의 target identity로 사용할 수는 없습니다.

Test plan

  • 전체 Python test: 1086 passed, 2 skipped
  • reverse-sync Python test: 763 passed
  • make test-reverse-sync: golden 16 passed, regression fixture 통과
  • make test-byte-verify: fast/splice 각각 21/21 passed
  • openspec validate complete-reverse-sync --strict
  • git diff --check

Stack

🤖 Generated with Codex

## Summary
push-eligible planning에서 provenance가 없는 normalized text prefix target 선택을 차단합니다.

- offline diagnostic은 기존 list text fallback을 유지합니다.
- online verify의 최초, determinism, idempotency planning은 text identity fallback을 비활성화합니다.
- provenance mapping이 없으면 no_mapping으로 기록하여 intent_complete gate에서 block합니다.
- tool version을 v4로 올려 기존 manifest의 재검증을 요구합니다.
- OpenSpec planner/renderer task와 migration boundary를 갱신합니다.

## Test plan
- [x] 전체 Python test 1086 passed, 2 skipped
- [x] reverse-sync Python test 763 passed
- [x] make test-reverse-sync golden 16 passed, regression fixture 통과
- [x] make test-byte-verify fast/splice 각각 21/21 passed
- [x] openspec validate complete-reverse-sync --strict
- [x] git diff --check

🤖 Generated with Codex

Co-Authored-By: Atlas <atlas@jk.agent>
@vercel

vercel Bot commented Jul 24, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
querypie-docs Ready Ready Preview, Comment Jul 24, 2026 10:45am

Request Review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bf297cb131

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +1153 to 1156
if (allow_text_identity_fallback
and strategy == 'list' and mapping is not None
and _contains_preserved_anchor_markup(mapping.xhtml_text)
and old_plain[:40].strip() not in mapping.xhtml_plain_text):

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Block stale list mappings in strict mode

When allow_text_identity_fallback=False on the push path and find_mapping_by_sidecar() returns a preserved-anchor list whose XHTML text does not contain the old list text, this guard now skips the only remapping path but leaves that stale mapping in place. In that scenario the subsequent list logic can patch the wrong XHTML list instead of recording no_mapping and blocking intent_complete; strict mode should reject this mismatch before continuing rather than silently trusting the stale target.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant