Skip to content

confluence-mdx: reverse-sync batch 결과 계약을 명시합니다 - #1035

Merged
jk-kim0 merged 1 commit into
mainfrom
jk/feat-reverse-sync-batch-report
Jul 27, 2026
Merged

confluence-mdx: reverse-sync batch 결과 계약을 명시합니다#1035
jk-kim0 merged 1 commit into
mainfrom
jk/feat-reverse-sync-batch-report

Conversation

@jk-kim0

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

Copy link
Copy Markdown
Contributor

Summary

reverse-sync branch batch의 page별 결과와 전체 partial success를 자동화 도구가 안정적으로 판별할 수 있는 versioned report로 만듭니다.

  • BatchReportreverse-sync-batch-report schema v1을 추가합니다.
  • branch --json 출력이 raw array 대신 command, branch, outcome, exit code, summary, page별 result를 가진 object를 반환합니다.
  • page별 local/publish 상태를 stable batch_status와 reason code로 정규화합니다.
  • 성공과 실패가 섞이면 partial_success, 실패만 있으면 failed, 전부 통과하면 success로 분류합니다.
  • partial/failed는 exit 1, success와 사용자 cancellation은 exit 0으로 고정합니다.
  • postcondition failure 뒤 남은 verified page를 not_attempted로 표시하고 resume_manifests에 explicit manifest 경로를 기록합니다.
  • conflict, publish error, cancellation에도 stable reason code를 기록합니다.
  • text 출력도 REMOTE VERIFIED, ALREADY APPLIED, NOT ATTEMPTED와 overall batch outcome을 구분합니다.

OpenSpec

  • 기준 change: openspec/changes/complete-reverse-sync
  • 완료: batch partial success/conflict/postcondition exit-code 및 JSON schema
  • 완료: postcondition 중단 뒤 explicit manifest 목록 기반 resume 경계
  • conflict나 remote drift manifest는 stale base일 수 있으므로 resume 목록에 포함하지 않습니다.

Safety impact

  • 이미 성공한 page를 batch 전체 실패처럼 숨기거나 rollback된 것처럼 표시하지 않습니다.
  • postcondition 실패 뒤 실제 PUT하지 않은 page를 단순 verified_local 성공으로 오인하지 않습니다.
  • resume 대상은 원격 발행을 시도하지 않은 immutable manifest로 제한합니다.
  • --yes와 사용자 cancellation은 local proof/preflight/postcondition gate 의미를 바꾸지 않습니다.

Test plan

  • 전체 Python test: 1113 passed, 2 skipped
  • reverse-sync Python test: 790 passed
  • make test-convert: 21 passed
  • make test-reverse-sync: golden 16 passed, regression 43 passed
  • make test-byte-verify: fast/splice 각각 21/21 passed
  • openspec validate complete-reverse-sync --strict
  • git diff --check
  • Python compileall

Stack

🤖 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 Canceled Canceled Comment Jul 27, 2026 7:15am

Request Review

@jk-kim0
jk-kim0 force-pushed the jk/feat-reverse-sync-explicit-manifest branch from c88e4a9 to 56d30a6 Compare July 27, 2026 06:13
@jk-kim0
jk-kim0 force-pushed the jk/feat-reverse-sync-batch-report branch from 39c850e to bb39ed5 Compare July 27, 2026 06:13
@jk-kim0
jk-kim0 force-pushed the jk/feat-reverse-sync-explicit-manifest branch from 56d30a6 to 9a8fca6 Compare July 27, 2026 07:08
Base automatically changed from jk/feat-reverse-sync-explicit-manifest to main July 27, 2026 07:11
branch batch JSON을 versioned report로 바꾸고 page별 stable status, partial success, exit code를 함께 기록합니다. postcondition 실패 뒤 미시도 manifest를 명시해 안전하게 재개할 수 있도록 합니다.

Co-Authored-By: Codex <noreply@openai.com>
@jk-kim0
jk-kim0 force-pushed the jk/feat-reverse-sync-batch-report branch from bb39ed5 to b8d5206 Compare July 27, 2026 07:11
@jk-kim0
jk-kim0 merged commit c1707de into main Jul 27, 2026
6 of 7 checks passed
@jk-kim0
jk-kim0 deleted the jk/feat-reverse-sync-batch-report branch July 27, 2026 07:15
jk-kim0 added a commit that referenced this pull request Jul 27, 2026
## Summary
legacy patch builder가 operation 생성 전에 skip한 table/macro 변경도 typed
PatchPlan의 stable capability contract로 정규화합니다.

- `unsafe_html_table_edit`, `raw_html_table`, `not_markdown_table`을
`unsupported_capability` + `raw_html_table_edit`로 변환합니다.
- `preserved_anchor_table`을 `unsupported_capability` +
`unknown_macro_mutation`으로 변환합니다.
- `no_mapping`, `missing_roundtrip_sidecar`를 strict plan의
`missing_identity`로 변환합니다.
- legacy skip의 block ID를 exact sidecar provenance 또는 legacy MDX-sidecar
진단 mapping으로 원래 `ChangeIntent`에 연결합니다.
- operation target identity가 없는 경우에도 issue를 intent에 연결하되 operation 실행
provenance에는 legacy fallback을 사용하지 않습니다.
- 이미 issue가 연결된 intent에 후속 generic `missing_identity`를 중복 생성하지 않습니다.

## OpenSpec
- 기준 change: `openspec/changes/complete-reverse-sync`
- 완료: unsupported table/macro 구조의 explicit block reason 전환
- 계속 남는 범위: capability별 renderer strategy 추출, provenance-first planner
전환, visible segment model 확장

## Safety impact
- push 결과와 자동화가 legacy 내부 분기명에 의존하지 않고 stable reason/capability ID를 사용할
수 있습니다.
- 하나의 unsupported 변경이 여러 issue로 보이는 진단 중복을 제거합니다.
- raw table/macro 변경은 계속 fail-closed이며 이 PR에서 새 capability를 실행 가능하게 만들지
않습니다.
- legacy mapping은 issue attribution에만 사용하며 executable target identity
gate를 우회하지 않습니다.

## Test plan
- [x] 전체 Python test: 1114 passed, 2 skipped
- [x] reverse-sync Python test: 791 passed
- [x] `make test-convert`: 21 passed
- [x] `make test-reverse-sync`: golden 16 passed, regression 43 passed
- [x] `make test-byte-verify`: fast/splice 각각 21/21 passed
- [x] `openspec validate complete-reverse-sync --strict`
- [x] `git diff --check`
- [x] Python `compileall`

## Stack
- Base: #1035
- Explicit manifest publish: #1034
- Typed plan: #1033
- Strict provenance identity: #1032
- Input/dependency gates: #1031
- Strict proof: #1030
- Publisher foundation: #1029
- 선행 PR merge 후 base를 순차적으로 `main`으로 변경할 수 있습니다.

🤖 Generated with Codex

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

Co-authored-by: Codex <noreply@openai.com>
jk-kim0 added a commit that referenced this pull request Jul 27, 2026
## Summary
repository의 reverse-sync skill과 CLI help를 현재 offline diagnostic / online
manifest publish lifecycle에 맞춥니다.

- offline `verify`/`debug`가 diagnostic이며 `push_eligible=false`임을 명확히
합니다.
- `push --dry-run`, inline publish, explicit `push --manifest`의 차이를
설명합니다.
- immutable run artifact, manifest integrity, preflight, postcondition,
`--yes` 경계를 문서화합니다.
- batch schema v1의 partial success, exit code, `not_attempted`,
`resume_manifests`를 추가합니다.
- 지원 상태와 stable reason code, canary 이전 production batch 금지를 반영합니다.
- 존재하지 않는 `var/pages.yaml`과 `--xhtml` 안내를 현재 `pages.qm.yaml`,
`--page-id`, `--page-dir`로 수정합니다.
- branch mode에서 이전에는 조용히 무시되던 `--page-id`와 `--page-dir`를 fail-fast로
거부합니다.

## OpenSpec
- 기준 change: `openspec/changes/complete-reverse-sync`
- 완료: `.agents/skills/reverse-sync/SKILL.md`의 current lifecycle/artifact
경로 동기화
- accepted spec 승격과 historical plan archive는 canary/P1 완료 후 별도로 남습니다.

## Safety impact
- offline `pass`를 publish 가능한 proof로 오해하지 않도록 합니다.
- flat compatibility artifact를 publisher 입력으로 안내하지 않습니다.
- `--yes`가 safety gate를 우회한다는 오해를 막습니다.
- branch에서 적용되지 않는 page option을 성공한 것처럼 보이지 않고 실행 전에 차단합니다.

## Test plan
- [x] 전체 Python test: 1117 passed, 2 skipped
- [x] reverse-sync Python test: 794 passed
- [x] `make test-reverse-sync`: golden 16 passed, regression 43 passed
- [x] `openspec validate complete-reverse-sync --strict`
- [x] stale `pages.yaml`/`--xhtml` reference search
- [x] `git diff --check`
- [x] Python `compileall`

## Stack
- Base: #1036
- Batch report: #1035
- Explicit manifest publish: #1034
- Typed plan: #1033
- Strict provenance identity: #1032
- Input/dependency gates: #1031
- Strict proof: #1030
- Publisher foundation: #1029
- 선행 PR merge 후 base를 순차적으로 `main`으로 변경할 수 있습니다.

🤖 Generated with Codex

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

Co-authored-by: Codex <noreply@openai.com>
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