Repository navigation
feat(update): JAM 1.5.0 — move the registration to the published release without redoing setup - #36
Merged
Merged
Conversation
…redoing setup What goes stale in JAM is a line, not a directory. The host launches JAM from a registration carrying an exact pin, so a newer JAM on the registry changes nothing until that pin moves. Right after 1.4.6 was published this machine measured `registration: HOST_REGISTRATION_STALE (registered 1.4.5)`, and the command that fixed it was `jam setup --agent` — which also re-plans the project binding, credentials and everything else. `jam update` moves the two axes it owns, package and registration, and nothing else. The published build is proven to answer before the registration is pointed at it, so a failure leaves the machine running what it was running. - cli/update.ts — planJamUpdate is pure: CURRENT / UPDATE_AVAILABLE / BROKEN / UNKNOWN. A host with no jam entry is left alone (registering it there is adoption, which is setup's job). An entry whose version cannot be read is not reported as current. Apply verifies, re-pins (remove then add — `mcp add` over an existing entry changes nothing on Claude Code), reads the registration back and finishes with `doctor`, rolling back to the previous pin if that is not ready. - bootstrap/host-mcp.ts — hostRegistration takes a version, so an update can register a release this build is not. Only the pin moves; the rest of the argv is the line setup writes. - cli-entry.ts — `update`, forwarded by @jam-mcp/bootstrap like every other command. - Release 1.5.0: notes and version pins. Co-Authored-By: Claude Opus 5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
요약
jam update하나를 싣는다. JAM 에서 낡는 것은 디렉터리가 아니라 줄이다 — host 는 exact pin 을 담은 등록 줄로 JAM 을 띄우므로, registry 에 새 JAM 이 올라와도 그 pin 이 움직이기 전에는 아무 것도 달라지지 않는다. 1.4.6 게시 직후 이 기계의 실측이registration: HOST_REGISTRATION_STALE (registered 1.4.5)였고, 그것을 고친 명령이jam setup --agent였다. 그 명령은 project binding·자격·나머지 전부를 다시 계획하는 다른 행위다.updater 가 다루는 축은 정확히 둘이다: package version, host registration version.
projects.yaml·project binding·자격·runtime mode·Jira 데이터는 건드리지 않는다.변경 사항
packages/server/src/cli/update.ts(신규)planJamUpdate— 순수 판정.CURRENT/UPDATE_AVAILABLE/BROKEN/UNKNOWN. registry 를 못 물으면UNKNOWN이며 절대CURRENT가 아니다.jam항목이 없는 host 는 그대로 둔다 — 없던 자리에 등록하는 것은 채택이고 그것은jam setup의 몫이다. 버전을 읽을 수 없는 항목은BROKEN이다(측정되지 않은 무언가를 돌리는 줄을 "최신" 이라고 적지 않는다).install → verify-install → switch-registration → verify-health. 삭제가 먼저 오지 않는다 — 새 build 가 답한다는 것을 확인한 뒤에야 등록을 그쪽으로 돌린다. 실패하면 기계는 돌던 것을 그대로 돌린다.remove다음add다. Claude Code 의mcp add는 기존 항목 위에서 "already exists" 라고 답하고 아무 것도 바꾸지 않는다 — 이것이 stale pin 이 setup 재실행을 견뎠던 이유다.doctor(config·자격·live read 1회). 등록이 성공했는데 건강하지 않으면 이전 pin 으로 되돌린다.packages/server/src/bootstrap/host-mcp.ts—hostRegistration이version을 받는다. 지금 도는 build 가 아닌 릴리스를 등록해야 update 가 성립한다. pin 만 움직이고 나머지 argv 는 setup 이 쓰는 줄 그대로라 두 경로가 서로 다른 등록으로 갈라지지 않는다.cli-entry.ts—case "update"+ USAGE.@jam-mcp/bootstrap이 다른 명령과 똑같이 그대로 forward 한다.AGENTS.md·CLAUDE.md— 갱신은setup --agent가 아니라jam update라는 것,UNKNOWN이 "최신" 이 아니라는 것, JAM 은 JAM 만 갱신한다는 것.docs/releases/v1.5.0.md, 버전 핀, lockfile.테스트 / 검증
npm run release:verify(build + test + release:check + pack + tarball smoke) 전부 통과npx --yes @jam-mcp/[email protected] doctor --json실기계 실행 —status: "ready"로doctorVerdict파싱 형태 확인jam update로 1.5.0 수렴, project binding·자격 동일, doctor ready, live Jira read PASS.신규 회귀:
check는 아무 명령도 돌리지 않는다 / 답하지 않는 pin 은 절대 등록되지 않는다(remove·add 둘 다 0회) /remove가add보다 앞선다 / 등록 후 재조회가 성공 판정의 근거다 /doctor가 ready 가 아니면 이전 pin 으로 되돌린다 /setup이 한 번도 불리지 않는다.리뷰 포인트
hostRegistration({ version })의 경계. pin 문자열만 치환한다. 다른 인자를 update 가 따로 만들면 setup 이 쓰는 줄과 갈라지고, 그 갈라짐은 다음 stale 판정에서야 드러난다.jam serve로 등록된 기계는 pin 이 줄에 없으므로 전역 설치본이 움직여야 한다 —npm install -g로 옮기고 등록 줄은 그대로 둔다. 이 경우 rollback 은 재설치라서, 되돌릴 수 없다고 말하고jam setup --agent를 안내한다.doctor를 검증에 쓴 것. 새 health 판정을 만들지 않고 이미 있는 축을 물었다. 등록만 서고 Jira 를 못 읽는 상태를 "완료" 로 적지 않기 위해서다.미결 / 후속
issue.create는 1.4.6 과 같은 이유로 여전히 미검증.jam update가asc update를 부르지 않고 그 반대도 없다. 자연어 orchestration 은 agent 규약이 담당한다.🤖 Generated with Claude Code