OpenClaw 변경 로그 업데이트은(는) 무엇을 하나요?
변경 로그 재작성 및 GitHub 릴리스 노트 원본 텍스트에 사용합니다. 일반적인
베타/안정 릴리스의 경우, 최종 소스 자격 부여 전에 가능하면 완전한 노트를 준비합니다.
이때 코드 SHA는 릴리스 SHA가 될 수도 있습니다. 편집 작업은 코드 검증과
중복될 수 있습니다. 검증 복구 백포트당 이 도구를 다시 실행하지 마십시오. 백포트가
코드 SHA를 대체하는 경우, 최종 코드 SHA가 녹색으로 통과한 후에 한 번만 다시 실행하십시오.
이는 기존 제품 증거 재사용 정책에 따른 진정한 CHANGELOG 전용 하위 항목입니다
(타이밍).
확장 안정 릴리스의 경우, 최종 정확한 헤드 검증 및 태깅 전에 실행하십시오.
도구 재시도, 게시 재개, 또는 프로모션을 위해 다시 실행하지 마십시오.
release-openclaw-maintainer와 함께 사용하십시오. 이 기술은 변경 로그 콘텐츠,
순서, 그룹화, 저작자 표시 규칙을 소유합니다.
목표
대상 CHANGELOG/<version>.md 릴리스 섹션을 완전히 생성된 기록 매니페스트에서
재구축하며, 오래된 초안 노트를 사용하지 않습니다. 모든 관련 이슈/PR 참조 및
모든 검증된 사람 Thanks @... 저작자를 보존하면서 사용자 관심도별로 정렬된
그룹화된 사용자 대상 릴리스 노트를 생성합니다.
CHANGELOG.md는 생성된 릴리스 인덱스입니다. 공유 소유자
scripts/lib/release-changelog.mjs는 작업 트리 또는 고정된 Git 참조에서 릴리스 섹션과
기여 기록을 해석하며, 여전히 모노리스를 포함하는 과거 참조도 포함합니다.
섹션을 보려면 node scripts/release-changelog.mjs read --version <version> [--ref <sha-or-tag>]를 사용하고,
기여 기록을 보려면 --record를 추가하십시오. 분할 아티팩트가 누락된 경우 루트 인덱스로
폴백해서는 안 됩니다. 기록이 없는 과거 릴리스는 발명된 출처를 얻지 않습니다.
생성된 CHANGELOG/** 파일은 정확하게 마이그레이션되거나 미러링된 바이트를 유지하며
루트 변경 로그와 같은 일반적인 포맷에서 제외됩니다. pnpm changelog:check를 사용하여
소유자를 통해 검증하십시오.
현재 쓰기는 분할 레이아웃을 사용합니다. 완전한 초기 섹션을 저장하려면
node scripts/release-changelog.mjs write --version <version> --file <section.md>를 사용하십시오.
이 명령은 릴리스 항목을 업데이트하고, CHANGELOG/records/<version>.md가 있는 경우 일치시키며
인덱스도 함께 업데이트합니다. 초기 생성은 아래 섹션 형식을 유지합니다.
게시된 문서 미러는 이 기술 끝의 별도 게시 후 경로를 따릅니다. 초기 생성은 절대
그것들을 덮어써서는 안 됩니다.
입력
- 대상 버전: 베타 델타의 경우 정확한
YYYY.M.PATCH-beta.N; 누적 안정 노트의 경우YYYY.M.PATCH. 베타 항목과 기록은 별도의 고정 아티팩트이며, 절대 안정-기반 섹션의 복사본이 아닙니다. - 베타 기준 태그: 게시 전에 공개 npm
openclaw@beta가 현재 선택한 버전을 캡처하며, 마지막 GitHub 사전 릴리스 또는 가장 높은 베타 접미사 버전이 아닙니다. 선택기는latest도 선택하는 안정 버전을 지칭할 수 있습니다. 정확한 베타 버전과 함께--base를 생략하거나--base npm-beta를 사용하여 한 번 확인하고, 생성된 매니페스트에서 확인된 태그를 보존한 후 편집, 검증 및 복구를 위해 명시적--base를 재사용하십시오. npm이 이미 후보 또는 최신 버전을 선택하는 경우, 생성은 기록 선택기 상태를 추측하지 않습니다. 이전에 캡처된 태그를 제공하십시오. 해당 태그가 조상이 아닌 경우 (예: 안정 마무리 포워드 포트), 검증기는 도달 가능한 병합 기준을 사용하고 캡처된 출하 태그의 누적 PR 기록을--shipped-ref의미를 통해 뺍니다. 매니페스트와 기록은 두 경계를 모두 유지합니다. 캡처된 태그로 다시 실행하여 동일한 범위를 확인하고, 이전 GitHub 베타를 대신 선택하지 마십시오. - 안정 기준 태그: 마지막으로 도달 가능한 출하된 안정 릴리스 태그. 대상의 조상이어야 합니다. 더 새롭지만 분기된 태그는 유효한 기록 경계가 아닙니다. 대상에서 도달 가능한 경우에만 명시적 출하/메인 마무리 SHA를 사용하십시오.
- 대상 참조: 문서화 중인 정확한 제품 완료 기록입니다. 기여 기록 대상은 최종 릴리스 대상의 조상이어야 합니다. 아직 생성되지 않은 변경 로그 커밋을 지명할 필요는 없습니다. 최종 노트를 확정하기 전에 이후의 수정 사항을 포함하십시오. 최종 노트는 자격 부여 전에 커밋되거나, 녹색 코드 SHA의 CHANGELOG 전용 하위 항목으로서 이후에 커밋될 수 있습니다.
- 표준 메인 참조: 검증 전에 가져온 현재
origin/main. 릴리스 노트는 동일한 작업이 백포트에 의해 전달될 때 원래 병합된 메인 PR을 인용합니다. 릴리스 브랜치 PR은 현재 메인에 포워드 포트가 없는 경우에만 사용됩니다.
워크플로우
-
릴리스 브랜치와 정확한 기록 대상을 확인하십시오:
git fetch --tags origin- 깨끗한
git status -sb확인 git rev-parse HEAD를 기록 대상으로 기록- 자격 부여가 이미 존재하는 경우 전체 릴리스 검증 실행 ID 및 시도 기록
- 최종 소스를 고정하기 전에 보류 중인 제품/버전/백포트 변경 사항을 완료하고, 실제 변경 사항에 대한 인벤토리 새로고침
-
기록 감사(직접 커밋 포함):
git log --topo-order --date=iso-strict --pretty=format:'%h%x09%ad%x09%s' <base-tag>..<target-ref>git log --topo-order --grep='(#' --date=short --pretty=format:'%h%x09%ad%x09%s' <base-tag>..<target-ref>- 대상에서 도달 가능하지만 기준에서는 도달 불가능한 모든 커밋을 포함하며, 병합된 사이드 브랜치도 포함합니다. 중복 제거 및 출하된 기록 차감 전에 PR 연결을 확인하고, 기존 되돌리기 제외를 유지합니다.
- 릴리스 중에 메인이 이동한 경우
--since='24 hours ago'도 검사합니다.
-
그룹화된 산문을 작성하기 전에 완전한 기여 기록 및 편집 매니페스트를 생성하십시오:
node --import tsx .agents/skills/openclaw-changelog-update/scripts/verify-release-notes.mjs \ --base <base-tag> \ --target <target-ref> \ --release-branch <canonical-release-branch> \ --main-ref origin/main \ --version <YYYY.M.PATCH> \ --manifest /tmp/openclaw-release-<YYYY.M.PATCH>.json \ --write-ledger베타 생성의 경우,
--version YYYY.M.PATCH-beta.N을 사용하고 첫 번째 인벤토리 실행에서는--base를 생략하십시오. 공유 작성기를 사용하여 정확한 버전 섹션을 Highlights, Changes, Fixes로 시작하고, 델타 매니페스트를 생성한 후 해당 범위에 대해서만 산문을 작성하십시오. 이후 실행은 명시적으로 캡처된 npm 기준선 태그를 사용합니다(분기 범위의 병합 기준 SHA만 사용하지 않음). 게시 후에 npm을 다시 쿼리하거나 누적 안정 항목을 덮어쓰지 마십시오. 안정 준비 시 누적 안정 노트를 재생성하십시오.릴리스 커밋이 출처 메타데이터를 전달할 수 없는 경우 반복 가능한
--release-provenance '<40sha> -> #PR[, #PR]'입력을 추가하십시오. 이는 커밋 본문 마커와 동일한 정확한 마커 문법 및 현재 메인 검증을 사용합니다.검증기는 작업 트리의 git 메타데이터 아래 정확한 기준/대상 SHA 스냅샷에서 공개 GitHub GraphQL 응답을 자동으로 재사용합니다. 동일한 대상에서 반복적인 재작성은 네트워크 검색을 피합니다. 의심스러운 API 데이터 후에는
--refresh-github-snapshot을 사용하고, 명시적 아티팩트에는--github-snapshot <path>를, 실시간 전용 감사에는--no-github-snapshot을 사용하십시오. GitHub 릴리스 본문은 항상 실시간으로 읽힙니다. 활성 소스에서 명시적CI #,CI run #,Actions run #,workflow run #참조는 이슈/PR 확인이 실패하고 실시간 동일 저장소 Actions 조회가 정확한 실행 ID를 확인하는 경우에만 별도로 분류됩니다. 활성 소스, 노트 또는 기여 기록에서 해당 번호의 일반적인 발생은 엄격한 이슈/PR 요구 사항으로 유지됩니다. 확인된 실행은 검증 출력 및 매니페스트에workflowRuns로 나타나며, PR 연결 또는 기여자 크레딧으로 나타나지 않습니다. 제목, 닫는 참조, 출처, 노트/기록에 없고 가장 높은 확인된 번호보다 낮은, 커밋 본문 텍스트에 국한된 GitHubNOT_FOUND참조만 생략될 수 있으며 크레딧 없이 매니페스트unavailableReferences로 보고됩니다.- 매니페스트는 재작성에 필요한 입력이며 사후 감사가 아닙니다. 모든 참조된 PR, 적격 기여자 크레딧, 인라인 이슈 컨텍스트, 모든 직접 커밋, PR 및 직접 커밋에 대한 편집 적격성 분류를 포함합니다.
- 스키마 버전 3은 필수 임시 매니페스트 계약입니다. 이전 매니페스트를 재생성하십시오. 버전 2는 지원되는 다운스트림 리더 경계가 아닙니다.
- 과거 백필의 경우,
--seed-ref <pre-backfill-ref>를 한 번 추가하여 이전 변경 로그의 기여 기록이 이전 병합 커밋이 PR 번호를 생략한 경우에도 유지되도록 하십시오. 검증기는 기준 태그 이후 되돌려진 작업(안정 릴리스 전에 되돌려진 베타 작업 포함)에 대한 기록을 제외합니다. - 생성된 출처 보고서는 범위 내 PR과 보유된 시드 전용 PR을 별도로 보고한 후 고유 행 총계를 표시합니다. 두 인벤토리에 모두 있는 PR은 범위 내로 계산됩니다. 시드 포함 총계를 현재 릴리스 범위에서 병합된 작업으로 설명하지 마십시오.
- 도달 가능한 메인 마무리가 출하된 태그와 다르거나 이후 포워드 포트 커밋이 이미 출시된 PR을
다시 연결하는 경우 반복 가능한
--shipped-ref <prior-shipped-tag>를 추가하십시오. 각 태그는 누적 출하 경계입니다. 검증기는 번호가 매겨진 릴리스 섹션의 완전한 기여 기록에서 명시적 PR 행을 결합하고, 겹치는 PR만 제외하며Unreleased는 무시합니다. 이 경계를 기준 SHA, 대상 산문 또는 대상 기록에서 추론하지 마십시오. 매니페스트와 생성된 출처는 결정론적 후보 검증을 위해 각 태그와 정확한 제외된 PR 인벤토리 및 개수를 유지합니다. - 소스 PR 검색은 GitHub 커밋 연결을 선택된 대상 기록 또는 표준 전달자의 경우 고정된 메인 기록으로 제한합니다. 컨텍스트 소스 참조는 병합된 커밋이 대상 기록에서 도달 가능하고 병합 시간이 대상 내에 있는 경우에만 기여가 됩니다. 모든 참조를 확인 가능하게 유지하되, 릴리스 준비가 계속되는 동안 단순히 병합된다는 이유로 관련 없는 PR을 승격하지 마십시오. 명시적 시드는 독립적으로 범위 내임이 입증되지 않는 한 기록 멤버십을 유지하고 시드 전용으로 유지됩니다. 모든 연결 페이지를 확인하십시오. 기존 표준, 체리픽 및 출처 계약은 권위를 유지합니다.
- 명시적 다중 커밋 되돌리기에는 되돌리기 제목과 하나의 독립적인
Reverts <full SHA> and <full SHA>.선언이 필요합니다. (쉼표로 구분된 목록에 최종and도 작동함). 정확한 끝to restore the previous behavior.은 허용됩니다. 중복, 축약, 포함 또는 반복된 선언은 되돌리기를 설정하지 않습니다. 각 명명된 커밋은 단일 부모 조상이어야 하며, 명명된 모든 패치를 역으로 적용하면 완전한 되돌리기 트리를 재현해야 합니다. 이 증명에 실패한 인식된 선언은 검증을 중단합니다. 증명은 후크나 외부 diff 없이 개인 Git 인덱스/객체 저장소를 사용합니다. 표준 단일 되돌리기 및 되돌리기-되돌리기 계정은 그대로 유지됩니다. - 백포트를
main의 원래 병합된 PR로 표준화하십시오. 명시적 체리픽 기원이 우선하며, 그 다음 고유한 정규화된 제목 일치는 동일한 저자와 겹치는 변경된 경로가 필요합니다. 해당 메인 PR이 현재origin/main에 존재하는 경우 릴리스/백포트 PR을 억제하십시오. 변경 사항이 먼저 해당 브랜치에 도착했고 아직main으로 포워드 포트되지 않은 경우에만 릴리스 브랜치 PR을 유지하십시오. ### Highlights,### Changes또는### Fixes를 편집하기 전에 매니페스트를 읽으십시오. 다시 감사하지 않고 오래된 그룹화된 산문을 그대로 전달하지 마십시오.- 모호한 커밋에 대해 연결된 PR/이슈 또는 diff를 검사하십시오. 직접 커밋은 편집 입력이며, 공개 원장 행이 아닙니다. 제목, 본문, 건드린 파일, 테스트 및 주변 커밋에서 중요한 사용자 결과를 추론하십시오.
-
선택한 하나의 릴리스 섹션만 다시 작성하십시오:
- 베타:
## YYYY.M.PATCH-beta.N, 캡처된 npm 베타 기준선 이후의 변경 사항만 포함 - 안정:
## YYYY.M.PATCH, 이전 안정 기준선 이후 누적 - 대상 릴리스 위에 오래된
## Unreleased섹션을 두지 마십시오. Unreleased에 릴리스 관련 노트가 포함된 경우, 삭제하지 말고 대상 섹션으로 접으십시오.
- 베타:
-
섹션 모양:
### Highlights: 안정의 경우 5-8개 글머리, 베타 델타의 경우 0-8개; 작은 핫픽스 베타에 대해 하이라이트를 만들지 마십시오.- 명확한 사용자 가시 기능 또는 워크플로우 해제, 중요한 안정성/안전 수정, 광범위한 표면 개선, 또는 릴리스를 정의하는 통합/호환성 이정표만 포함하십시오.
- 모든 하이라이트는 한 문장으로 사용자에게 무엇이 변경되었는지 말해야 합니다. 글머리당 하나의 사용자 스토리를 사용하고 지원 PR을 그룹화하십시오.
- 결과가 중요한 설치/업데이트, 데이터 안전 또는 널리 가시적인 사용자 개선이 아닌 한 테스트, CI, 리팩터, 문서, 카탈로그 변경 및 구현 세부 사항을 제외하십시오.
### Changes: 새로운 기능 및 동작 변경### Fixes: 사용자 대면 수정 사항을 먼저, 영향 및 표면별로 그룹화- 여러 커밋이 하나의 사용자 대면 스토리를 말할 때 작은 커밋당 하나의 글머리를 피하고 관련 변경/수정 사항을 표면 및 사용자 영향별로 그룹화하십시오.
### Complete contribution record: 그룹화된 산문 후 생성된 PR 우선 기록; 두 번째 릴리스 요약이 아닌 철저한 회계 표면입니다.
-
확인된 저작자 표시 유지:
- PR 저자는 표준 GitHub PR에서 가져오며, 절대 릴리스 커밋 저자, 커미터 또는 백포트 연산자가 아닙니다. 해당 PR의 원래 병합 커밋에서 공동 저자를 확인하십시오. 릴리스 전달자 트레일러 및 컨텍스트 언급은 다른 PR에 크레딧을 설정하지 않습니다.
- PR, 원래 공동 저자 및 연결된 보고자 증거에서 생성된 감사를 재구축하십시오. 시드는 멤버십과 참조를 유지하지만, 확인되지 않은 이전 감사는 유지하지 않습니다. 재생성은 기록 및 그룹화된 산문에서 오래된 생성된 크레딧을 대체합니다. 검증은 누락된 크레딧과 지원되지 않는 크레딧을 모두 거부합니다. 언제
…
[번역을 위해 잘림]