Repository navigation
터미널 사용성 세 가지와 npm scope @xgen-ai - #92
Merged
Merged
Conversation
`xgen`을 처음 켠 사용자가 모델 설정부터 실행까지 가는 길에 막히는 지점이 셋 있었다. provider preset이 둘뿐이라 쓰는 provider가 목록에 없었고, `--allow-execute`만 주면 이유를 알 수 없는 코드로 죽었고, `--debug`는 help에 적힌 대로 동작하지 않았다. provider preset과 base URL 규칙 - `api_endpoints`가 base URL의 path를 `/v1`로 강제해서, 자기 API를 다르게 번호 붙이는 provider는 설정 자체가 불가능했다. `/v1`은 관례일 뿐이므로 빈 path만 거절한다. 오류 코드는 `base_url_must_end_in_v1`에서 `base_url_must_name_the_api_root`로 바꿨다. - 손으로 유지하던 provider 목록 셋을 표 하나로 합치고 preset을 다섯으로 늘렸다. deepseek, openai, openrouter, glm, local이고 그 밖은 custom이다. - `local`은 `127.0.0.1`을 쓴다. 평문 HTTP는 loopback literal에만 허용되므로 `localhost`로 적으면 네트워크에 닿기 전에 거절된다. - Claude는 넣지 않았다. OpenAI 호환 layer가 `response_format`을 무시한다고 문서에 적혀 있어, 설정은 통과하고 모든 Run이 실패하는 preset이 된다. - 모든 preset이 실제 설정 규칙을 통과하는지 보는 테스트를 더했다. run의 실행 파일 catalog - `--allow-execute`에 catalog가 없으면 거절하는 것은 의도된 계약이다. execution profile digest가 `environment:PATH`와 실행 파일 해시를 묶으므로, PATH 자동 발견을 기본값으로 하면 같은 명령이 머신마다 다른 프로필을 만들고 `resume`이 닫힌다. 그래서 기본값은 그대로 두고 `--allow-path-executables`를 `run`과 `resume`에 opt-in으로 더했다. - 명시한 `--allow-executable` 항목은 이름 충돌 시 이긴다. 발견은 catalog를 넓힐 뿐 host가 적은 항목을 바꾸지 않는다. - 발견은 shell을 넣지 않는다. ADR-0049가 catalogued executable을 shell 없이 시작하도록 정했고, `sh -c`는 실제 명령을 argument에 숨겨 Receipt를 비운다. - 빈 catalog 실패가 어느 쪽이 빠졌는지와 두 해결책을 함께 출력한다. `PublicRunError::Configuration`은 54곳 공용이라 코드만으로는 알 수 없다. run과 resume의 진행 표시 - `--debug`가 `run`·`resume`에서는 파싱만 되고 버려졌다. 이제 REPL과 같은 formatter로 durable 경계 이벤트를 stderr에 적는다. - spinner가 아니라 줄 단위 이벤트를 쓴다. `run`의 stderr는 이미 `XGEN_*` 줄 계약이고 spinner는 `XGEN_STARTED`와 커서가 겹친다. - 기본값은 침묵이다. 결과 줄만 파싱하는 host에 묻지 않은 prefix를 주지 않는다. - 쓰기 실패는 보고만 멈추고 Run은 계속한다. 진단 한 줄 때문에 durable 작업을 버리지 않는다. - `resume`이 egress 유무로 갈렸던 두 경로를 하나로 합쳤다. 동의가 없으면 거절하는 resolver를 넘기며, 동작은 기존과 같다. 691 passed, 0 failed, 4 ignored. fmt, clippy, 공개 문서 검사 통과. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
ADR-0031이 정한 `@xgen` scope는 다른 계정이 이미 선점하고 있다. 그 아래 게시된 package는 없지만 npm은 user와 organization이 같은 namespace를 쓰므로 organization으로도 확보할 수 없다. 운영 절차가 "scope 확보가 불명확하면 게시하지 말고 naming ADR을 먼저 갱신한다"로 fail-closed를 걸어 두었으므로, 이름을 바꾸는 결정이 게시의 선행 조건이다. - scope를 `@xgen-ai`로 바꿨다. 회사의 공개 배포 식별자가 이미 그 이름이라 설치 경로와 공개 식별자가 어긋나지 않는다. 개인 계정 scope는 소유권을 옮길 때 게시된 package 여섯 개를 deprecate해야 해서 쓰지 않는다. - ADR-0031이 정한 배포 구조는 그대로다. 같은 exact version, lifecycle script 없음, 설치 중 download와 native compile 없음, provenance는 OIDC다. - ADR-0051을 더하고 ADR-0031·0034·0046의 상태 줄이 그것을 가리키게 했다. 세 ADR의 본문은 당시 결정의 기록이므로 `@xgen`을 그대로 둔다. - 문자열 치환이 닿지 않는 네 곳을 따로 고쳤다. `smoke.mjs`는 scope를 경로 조각으로 join하고, `check.mjs`는 이스케이프된 정규식에 담고 있으며, 문서 두 곳은 slash 없이 scope만 언급한다. 앞 둘은 동작 경로다. npm 계약 검사 PASS, 14 tests pass, release workflow와 공개 문서 검사 PASS. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
rc.3을 게시할 수 있는 상태로 만드는 두 덩어리다.
터미널에서 run을 바로 쓰게 한다
xgen을 처음 켠 사용자가 모델 설정부터 실행까지 가는 길에 막히는 지점 셋을 없앴다.api_endpoints가 base URL의 path를/v1로 강제해서, 자기 API를 다르게 번호 붙이는 provider는 설정 자체가 불가능했다. 빈 path만 거절하도록 바꾸고 오류 코드를base_url_must_name_the_api_root로 고쳤다. 손으로 유지하던 목록 셋을 표 하나로 합치고 preset을 다섯으로 늘렸다. Claude는 넣지 않았다 — OpenAI 호환 layer가response_format을 무시한다고 문서에 적혀 있어, 설정은 통과하고 모든 Run이 실패하는 preset이 된다. 모든 preset이 실제 설정 규칙을 통과하는지 보는 테스트를 더했다.--allow-execute에 catalog가 없으면 거절하는 것은 의도된 계약이다. execution profile digest가environment:PATH와 실행 파일 해시를 묶으므로, PATH 자동 발견을 기본값으로 하면 같은 명령이 머신마다 다른 프로필을 만들고resume이 닫힌다. 기본값은 그대로 두고--allow-path-executables를 opt-in으로 더했다. 발견은 shell을 넣지 않는다 — ADR-0049가 catalogued executable을 shell 없이 시작하도록 정했고sh -c는 실제 명령을 argument에 숨겨 Receipt를 비운다.--debug가 help에 적힌 것과 달리 파싱만 되고 버려졌다. REPL과 같은 formatter로 durable 경계 이벤트를 stderr에 적는다. 기본값은 침묵이고, 쓰기 실패는 보고만 멈추고 Run은 계속한다.npm package scope를 @xgen-ai로 옮긴다
ADR-0031이 정한
@xgenscope는 다른 계정이 이미 선점하고 있다. 그 아래 게시된 package는 없지만 npm은 user와 organization이 같은 namespace를 쓰므로 organization으로도 확보할 수 없다. 운영 절차가 "scope 확보가 불명확하면 게시하지 말고 naming ADR을 먼저 갱신한다"로 fail-closed를 걸어 두었으므로, 이름을 바꾸는 결정이 게시의 선행 조건이다.ADR-0051을 더하고 ADR-0031·0034·0046의 상태 줄이 그것을 가리키게 했다. 세 ADR의 본문은 당시 결정의 기록이므로
@xgen을 그대로 둔다.문자열 치환이 닿지 않는 네 곳을 따로 고쳤다.
smoke.mjs는 scope를 경로 조각으로 join하고,check.mjs는 이스케이프된 정규식에 담고 있으며, 문서 두 곳은 slash 없이 scope만 언급한다. 앞 둘은 동작 경로라 놓치면 smoke install과 contract check가 옛 이름을 찾는다.검증
cargo test --workspace --locked691 passed, 0 failed, 4 ignoredcargo fmt --all -- --check,cargo clippy --workspace --all-targets --locked -- -D warningsnpm run checkPASS,npm test14 passsh scripts/check-npm-distribution-workflow.sh,sh scripts/check-rc3-public-docs.shPASSbootstrap 여섯 package는
0.0.0-bootstrap.0으로 이미 게시했고 로컬 매니페스트와 integrity가 일치한다. 실행 파일도 설치 시 실행되는 script도 없다.🤖 Generated with Claude Code