deploy/update.sh 로 업데이트하면, 인스톨러가 새로 기록한 .mam/version.txt 와 .mam/asset_hashes.txt 를 업데이트 전 백업본으로 다시 덮어씁니다. 그 결과 버전 기록이 실제 설치 버전과 달라지고, 다음 업데이트 때 원본 그대로인 파일이 "로컬 수정됨"으로 오판되어 불필요한 백업이 생성됩니다.
세부 원인 분석 (Detailed Root Causes)
위치: deploy/update.sh 137행(백업), 168행(실패 시 롤백 복원), 232행(성공 후 복원)
증상:
인스톨러(deploy/install.sh)는 410행에서 asset_hashes.txt 를 새 파일 기준으로 재생성하고, 452행에서 version.txt 에 새 커밋을 기록합니다.
그런데 update.sh 는 설치 성공 후(232행) .mam.update-tmp/ 의 이전 install_state, asset_hashes.txt, version.txt 를 .mam/ 에 다시 복사합니다.
재현 결과(6c0b8b0 → 4d444ce):
설치된 매니페스트 파일 83개는 upstream HEAD 와 모두 일치했지만, version.txt 는 commit=6c0b8b0… 로 남음
asset_hashes.txt 기준 해시 비교 시 39개 불일치
remove.sh 의 수정 파일 검사가 이 이전 해시로 비교하여, 원본 그대로인 파일 36개가 .mam-skill-backup.<ts>/ 로 백업됨 (36개 모두 upstream 이력에 존재하는 원본 blob 으로 확인)
제안 해결책:
성공 경로(232행)에서는 asset_hashes.txt, version.txt 를 복원 대상에서 제외하고 인스톨러가 새로 쓴 값을 유지
install_state 는 필요한 키(예: gitignore_created)만 병합
실패 경로(168행)의 롤백 복원은 현행 유지
재현 절차 (Reproduction)
이전 커밋이 설치된 워크스페이스에서 bash .mam_deploy/update.sh --yes
cat .mam/version.txt → 이전 커밋이 표시됨
.mam/asset_hashes.txt 기준으로 현재 파일 해시 비교 → 업데이트된 파일 수만큼 불일치
환경 정보 (Environment)
OS: macOS (Darwin 25.6.0)
MAM Version: 6c0b8b0 → 4d444ce (main)
## 문제 개요 (Summary)
`deploy/update.sh` 로 업데이트하면, 인스톨러가 새로 기록한 `.mam/version.txt` 와 `.mam/asset_hashes.txt` 를 업데이트 전 백업본으로 다시 덮어씁니다. 그 결과 버전 기록이 실제 설치 버전과 달라지고, 다음 업데이트 때 원본 그대로인 파일이 "로컬 수정됨"으로 오판되어 불필요한 백업이 생성됩니다.
---
## 세부 원인 분석 (Detailed Root Causes)
* **위치**: `deploy/update.sh` 137행(백업), 168행(실패 시 롤백 복원), **232행(성공 후 복원)**
* **증상**:
* 인스톨러(`deploy/install.sh`)는 410행에서 `asset_hashes.txt` 를 새 파일 기준으로 재생성하고, 452행에서 `version.txt` 에 새 커밋을 기록합니다.
* 그런데 `update.sh` 는 설치 성공 후(232행) `.mam.update-tmp/` 의 이전 `install_state`, `asset_hashes.txt`, `version.txt` 를 `.mam/` 에 다시 복사합니다.
* 재현 결과(`6c0b8b0` → `4d444ce`):
* 설치된 매니페스트 파일 83개는 upstream HEAD 와 모두 일치했지만, `version.txt` 는 `commit=6c0b8b0…` 로 남음
* `asset_hashes.txt` 기준 해시 비교 시 39개 불일치
* `remove.sh` 의 수정 파일 검사가 이 이전 해시로 비교하여, 원본 그대로인 파일 36개가 `.mam-skill-backup.<ts>/` 로 백업됨 (36개 모두 upstream 이력에 존재하는 원본 blob 으로 확인)
* **제안 해결책**:
* 성공 경로(232행)에서는 `asset_hashes.txt`, `version.txt` 를 복원 대상에서 제외하고 인스톨러가 새로 쓴 값을 유지
* `install_state` 는 필요한 키(예: `gitignore_created`)만 병합
* 실패 경로(168행)의 롤백 복원은 현행 유지
---
## 재현 절차 (Reproduction)
1. 이전 커밋이 설치된 워크스페이스에서 `bash .mam_deploy/update.sh --yes`
2. `cat .mam/version.txt` → 이전 커밋이 표시됨
3. `.mam/asset_hashes.txt` 기준으로 현재 파일 해시 비교 → 업데이트된 파일 수만큼 불일치
## 환경 정보 (Environment)
* OS: macOS (Darwin 25.6.0)
* MAM Version: `6c0b8b0` → `4d444ce` (main)
업데이트 직전 파일은 6c0b8b0과 49/49 일치했으나, asset_hashes.txt 53개는 ac82f9b~4025623(8/17~8/20)과만 전부 일치했습니다. 업데이트 후에도 같은 기록이 복원되어, 해시 기록이 과거 설치 시점에 고정됩니다. 8/20 기록이 8/28 설치에 남은 경위는 미확인입니다.
remove.sh가 원본 파일 32개를 .mam-skill-backup.20260911T230240Z/에 백업했습니다. 32개 모두 upstream blob으로 확인했습니다.
install.sh를 직접 실행하면 해시가 틀린 파일이 PRESERVE_CUSTOM으로 분류되어 조용히 갱신되지 않습니다.
수정 후 첫 업데이트는 로컬의 옛 update.sh로 실행되고, remove.sh도 기존 해시로 비교합니다. 기존 작업 공간에는 해시 재생성 마이그레이션이 필요합니다.
**추가 확인 사항 (How_To_Use_GENAI 작업 공간)**
- 업데이트 직전 파일은 `6c0b8b0`과 49/49 일치했으나, `asset_hashes.txt` 53개는 `ac82f9b`\~`4025623`(8/17\~8/20)과만 전부 일치했습니다. 업데이트 후에도 같은 기록이 복원되어, 해시 기록이 과거 설치 시점에 고정됩니다. 8/20 기록이 8/28 설치에 남은 경위는 미확인입니다.
- `remove.sh`가 원본 파일 32개를 `.mam-skill-backup.20260911T230240Z/`에 백업했습니다. 32개 모두 upstream blob으로 확인했습니다.
- `install.sh`를 직접 실행하면 해시가 틀린 파일이 `PRESERVE_CUSTOM`으로 분류되어 조용히 갱신되지 않습니다.
- 수정 후 첫 업데이트는 로컬의 옛 `update.sh`로 실행되고, `remove.sh`도 기존 해시로 비교합니다. 기존 작업 공간에는 해시 재생성 마이그레이션이 필요합니다.
main 8e7282c 에 병합되어 해결되었습니다 (v4.4.4, 브랜치 fix/issue-12-8-7).
deploy/update.sh 성공 경로에서 version.txt·asset_hashes.txt 를 더 이상 이전 값으로 복원하지 않습니다. install_state 는 새 설치가 쓰지 않은 키만 병합합니다 (정확 키 매칭, key=value 아닌 줄 무시, 개행 보장).
main `8e7282c` 에 병합되어 해결되었습니다 (v4.4.4, 브랜치 `fix/issue-12-8-7`).
- `deploy/update.sh` 성공 경로에서 `version.txt`·`asset_hashes.txt` 를 더 이상 이전 값으로 복원하지 않습니다. `install_state` 는 새 설치가 쓰지 않은 키만 병합합니다 (정확 키 매칭, `key=value` 아닌 줄 무시, 개행 보장).
- 실패 경로(`restore_on_failure`)는 기존대로 전체 복원합니다.
- 테스트: `tests/test_issue8_update_state.py` (실제 install→update 사이클).
- 리뷰: claude·agy·grok·codex 4인 `[VERDICT: PASS]`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
문제 개요 (Summary)
deploy/update.sh로 업데이트하면, 인스톨러가 새로 기록한.mam/version.txt와.mam/asset_hashes.txt를 업데이트 전 백업본으로 다시 덮어씁니다. 그 결과 버전 기록이 실제 설치 버전과 달라지고, 다음 업데이트 때 원본 그대로인 파일이 "로컬 수정됨"으로 오판되어 불필요한 백업이 생성됩니다.세부 원인 분석 (Detailed Root Causes)
deploy/update.sh137행(백업), 168행(실패 시 롤백 복원), 232행(성공 후 복원)deploy/install.sh)는 410행에서asset_hashes.txt를 새 파일 기준으로 재생성하고, 452행에서version.txt에 새 커밋을 기록합니다.update.sh는 설치 성공 후(232행).mam.update-tmp/의 이전install_state,asset_hashes.txt,version.txt를.mam/에 다시 복사합니다.6c0b8b0→4d444ce):version.txt는commit=6c0b8b0…로 남음asset_hashes.txt기준 해시 비교 시 39개 불일치remove.sh의 수정 파일 검사가 이 이전 해시로 비교하여, 원본 그대로인 파일 36개가.mam-skill-backup.<ts>/로 백업됨 (36개 모두 upstream 이력에 존재하는 원본 blob 으로 확인)asset_hashes.txt,version.txt를 복원 대상에서 제외하고 인스톨러가 새로 쓴 값을 유지install_state는 필요한 키(예:gitignore_created)만 병합재현 절차 (Reproduction)
bash .mam_deploy/update.sh --yescat .mam/version.txt→ 이전 커밋이 표시됨.mam/asset_hashes.txt기준으로 현재 파일 해시 비교 → 업데이트된 파일 수만큼 불일치환경 정보 (Environment)
6c0b8b0→4d444ce(main)추가 확인 사항 (How_To_Use_GENAI 작업 공간)
6c0b8b0과 49/49 일치했으나,asset_hashes.txt53개는ac82f9b~4025623(8/17~8/20)과만 전부 일치했습니다. 업데이트 후에도 같은 기록이 복원되어, 해시 기록이 과거 설치 시점에 고정됩니다. 8/20 기록이 8/28 설치에 남은 경위는 미확인입니다.remove.sh가 원본 파일 32개를.mam-skill-backup.20260911T230240Z/에 백업했습니다. 32개 모두 upstream blob으로 확인했습니다.install.sh를 직접 실행하면 해시가 틀린 파일이PRESERVE_CUSTOM으로 분류되어 조용히 갱신되지 않습니다.update.sh로 실행되고,remove.sh도 기존 해시로 비교합니다. 기존 작업 공간에는 해시 재생성 마이그레이션이 필요합니다.main
8e7282c에 병합되어 해결되었습니다 (v4.4.4, 브랜치fix/issue-12-8-7).deploy/update.sh성공 경로에서version.txt·asset_hashes.txt를 더 이상 이전 값으로 복원하지 않습니다.install_state는 새 설치가 쓰지 않은 키만 병합합니다 (정확 키 매칭,key=value아닌 줄 무시, 개행 보장).restore_on_failure)는 기존대로 전체 복원합니다.tests/test_issue8_update_state.py(실제 install→update 사이클).[VERDICT: PASS].