confluence-mdx: reverse-sync target identity를 엄격하게 검증합니다#1032
Conversation
## 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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
💡 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".
| 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): |
There was a problem hiding this comment.
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 👍 / 👎.
Summary
push-eligible planning에서 provenance가 없는 normalized text prefix target 선택을 제거합니다.
allow_text_identity_fallback=false를 강제합니다.no_mapping으로 기록하고intent_completegate에서 block합니다.reverse-sync-cli-v4로 올려 과거 manifest의 재검증을 요구합니다.Why
normalized text prefix는 중복 list나 유사 content에서 다른 XHTML fragment를 선택할 수 있습니다. 진단 경로에서는 fixture migration을 위해 유지할 수 있지만, remote update를 허용하는 proof의 target identity로 사용할 수는 없습니다.
Test plan
make test-reverse-sync: golden 16 passed, regression fixture 통과make test-byte-verify: fast/splice 각각 21/21 passedopenspec validate complete-reverse-sync --strictgit diff --checkStack
main으로 변경할 수 있습니다.🤖 Generated with Codex