Merge tag '0.1.0' into dev
Release 0.1.0 0.1.0
This commit is contained in:
commit
0f4619bae2
7 changed files with 95 additions and 32 deletions
|
|
@ -1,14 +1,14 @@
|
|||
---
|
||||
name: dev-runtime-deploy
|
||||
version: 1.0.6
|
||||
description: dev 배포, dev-runtime 배포, Edge/Node dev 환경 배포 요청에서 clean sync, 전체 테스트, rebuild, 원격 배포, OpenAI-compatible capacity smoke를 수행하는 절차
|
||||
version: 1.0.7
|
||||
description: dev 배포, dev-runtime 배포, Edge/Node dev 환경 배포 요청에서 dev commit count 기반 git-flow release를 만들고 clean sync, 전체 테스트, rebuild, 원격 배포, OpenAI-compatible capacity smoke, release finish와 tag push를 수행하는 절차
|
||||
---
|
||||
|
||||
# dev-runtime-deploy
|
||||
|
||||
## 목적
|
||||
|
||||
dev-runtime provider pool을 제품 검증이 끝난 상태로 배포한다. 배포는 원격 checkout 동기화, 전체 테스트, 전체 rebuild, Edge/Node 재시작, provider snapshot 기반 capacity 검증까지 포함한다.
|
||||
dev-runtime provider pool을 `dev` 기준 git-flow release로 배포한다. `dev` commit count로 release version을 만들고 release branch에서 전체 테스트, rebuild, Edge/Node 재시작, provider snapshot 기반 capacity 검증을 완료한 뒤에만 release를 finish하고 tag를 원격에 반영한다.
|
||||
|
||||
## 언제 호출할지
|
||||
|
||||
|
|
@ -22,7 +22,18 @@ dev-runtime provider pool을 제품 검증이 끝난 상태로 배포한다. 배
|
|||
- `env`: 배포 대상 환경. 기본값은 `dev`이다.
|
||||
- `model`: OpenAI-compatible model alias. 지정하지 않으면 dev 환경 문서의 기준 model을 사용한다.
|
||||
- `capacity_targets`: provider별 기대 capacity. 지정하지 않으면 dev 환경 인벤토리 또는 `agent-test/dev/*` 문서에서 읽는다.
|
||||
- `source_ref`: 배포할 git ref. 지정하지 않으면 원격 runner의 기본 배포 branch 기준을 따른다.
|
||||
- 배포 기준 branch는 항상 `dev`이며 다른 `source_ref`로 대체하지 않는다.
|
||||
|
||||
## Git Flow release 규칙
|
||||
|
||||
- develop branch는 `dev`, production branch는 `main`을 사용한다.
|
||||
- release version은 clean sync된 `origin/dev` HEAD에서 `git rev-list --count HEAD`로 계산한 `dev-<commit-count>`이다.
|
||||
- release branch는 git-flow 기본 prefix를 적용한 `release/dev-<commit-count>`, tag는 `dev-<commit-count>`를 사용한다.
|
||||
- 별도 버전 파일은 만들지 않는다. release branch와 최종 tag가 배포 버전 기록이다.
|
||||
- release branch에서 빌드와 배포를 수행하고 모든 필수 테스트와 live capacity smoke가 성공한 경우에만 `git flow release finish`를 실행한다.
|
||||
- finish는 local production/develop merge와 tag 생성을 수행하고, 검증된 `main`, `dev`, tag, release branch 삭제를 atomic push로 원격에 함께 반영한다.
|
||||
- 검증 실패 시 finish, tag 생성, `main`/`dev` 반영을 수행하지 않고 release branch를 유지한다.
|
||||
- 같은 version의 게시된 release branch가 있고 tag가 없으면 새 branch를 만들지 않고 해당 release를 재개한다.
|
||||
|
||||
## 먼저 확인할 것
|
||||
|
||||
|
|
@ -39,6 +50,11 @@ dev-runtime provider pool을 제품 검증이 끝난 상태로 배포한다. 배
|
|||
- [ ] OneXPlayer SSH 접속 정보는 현재 host 기준 `ssh r0bin@192.168.0.59`이다. `toki` 사용자명 또는 remote runner를 경유한 OneXPlayer 접속을 사용하지 않는다.
|
||||
- [ ] RTX5090 SSH는 현재 작업 호스트의 local SSH config alias `ssh iop-dev-rtx5090`을 사용한다. 이 alias는 public-key batch 인증을 사용하며, host identity와 공개키 지문은 inventory의 `rtx5090-lemonade-node.ssh_access`에서 확인한다.
|
||||
- [ ] 현재 구현의 completion 검증 대상은 legacy `/v1/completions`가 아니라 `/v1/chat/completions`이다. `/v1/completions`는 route가 구현되어 있을 때만 별도 검증한다.
|
||||
- [ ] 원격 runner에 git-flow가 설치되어 있고 `gitflow.branch.master=main`, `gitflow.branch.develop=dev`, `gitflow.prefix.release=release/`인지 확인한다.
|
||||
- [ ] shallow clone이 아니며 `origin/dev`, `origin/main`, tag를 fetch할 수 있는지 확인한다.
|
||||
- [ ] `origin/main`이 `origin/dev`의 ancestor인지 확인한다. 아니면 배포하지 않고 branch 정합화를 먼저 요구한다.
|
||||
- [ ] 계산된 tag가 이미 local이나 origin에 있으면 삭제·이동·덮어쓰기하지 않고 완료 상태 또는 partial finish 상태를 보고한다.
|
||||
- [ ] 계산된 `release/dev-<count>` 이외의 release branch가 있으면 중단한다. AVH git-flow는 다른 release가 진행 중이면 새 release start를 허용하지 않는다.
|
||||
- [ ] token, secret header, bootstrap token, private key 경로는 최종 보고에 원문으로 출력하지 않는다.
|
||||
|
||||
## 실행 절차
|
||||
|
|
@ -48,28 +64,40 @@ dev-runtime provider pool을 제품 검증이 끝난 상태로 배포한다. 배
|
|||
- provider pool 대상 model alias와 provider별 capacity를 확정한다.
|
||||
- 필수 정보가 없거나 서로 충돌하면 배포를 시작하지 말고 누락/충돌 항목을 보고한다.
|
||||
|
||||
2. **원격 checkout clean sync**
|
||||
- 원격 runner checkout에서 `git fetch` 후 배포 기준 ref로 `git reset --hard`를 수행한다.
|
||||
2. **dev clean sync와 release version 확정**
|
||||
- 원격 runner checkout에서 `git fetch origin dev main --tags` 후 local `dev`를 `origin/dev`로 clean sync한다.
|
||||
- dirty 파일은 보존 대상으로 보지 않는다. 배포 전 clean 상태를 만든다.
|
||||
- 기본 cleanup은 `git clean -fd`이다. `git clean -fdx`는 config, token, secret, runtime artifact까지 삭제할 수 있으므로 사용하지 않는다.
|
||||
- sync 후 `git status --short --branch`와 `git log --oneline -1`을 기록한다.
|
||||
- shallow clone이 아닌지, `HEAD`와 `origin/dev`가 같은 commit인지, `origin/main`이 `origin/dev`의 ancestor인지 확인한다.
|
||||
- local `main`도 `origin/main`과 같은 commit으로 맞춘다.
|
||||
- sync 후 `git status --short --branch`, `git log --oneline -1`, `git rev-list --count HEAD`를 기록한다.
|
||||
- commit count가 `<count>`이면 release version을 `dev-<count>`로 확정한다.
|
||||
- 이 시점의 `origin/dev`를 `DEV_BASE_SHA`, `origin/main`을 `MAIN_BASE_SHA`로 기록한다.
|
||||
|
||||
3. **빌드 전 전체 테스트**
|
||||
3. **git-flow release 시작**
|
||||
- `dev-<count>` local/remote tag가 없어야 한다.
|
||||
- `release/dev-<count>`가 local과 origin에 모두 없으면 clean `dev`에서 `git flow release start dev-<count>`와 `git flow release publish dev-<count>`를 실행한다.
|
||||
- tag 없이 origin의 `release/dev-<count>`만 있으면 `git flow release track dev-<count>`로 checkout하여 기존 release를 재개한다. local branch도 있으면 local/remote가 같은 commit이고 clean한 경우에만 그대로 재개한다.
|
||||
- 다른 release branch가 있거나 같은 release의 local/remote가 diverge한 상태에서는 자동 삭제·reset하지 않고 중단한다.
|
||||
- release HEAD는 `DEV_BASE_SHA`와 같거나 그 descendant여야 한다.
|
||||
- 빌드·배포할 release HEAD를 `DEPLOY_SHA`, 그 tree를 `DEPLOY_TREE`로 기록한다.
|
||||
|
||||
4. **빌드 전 전체 테스트**
|
||||
- clean source 기준으로 `go test ./...`를 실행한다.
|
||||
- client/Flutter, proto, Makefile, script, config 변경이 배포 범위에 포함되면 해당 도메인 규칙의 전체 테스트도 추가한다.
|
||||
- 전체 테스트가 실패하면 build/deploy를 진행하지 않고 실패 패키지와 핵심 오류를 보고한다.
|
||||
|
||||
4. **전체 rebuild**
|
||||
5. **전체 rebuild**
|
||||
- 같은 source ref에서 dev-runtime Edge binary, mac node binary, Linux ARM64 node binary, Windows AMD64 node binary를 모두 다시 빌드한다.
|
||||
- stale binary가 의심되거나 `config refresh` subcommand, admin port, version 출력이 맞지 않으면 clean sync부터 다시 시작한다.
|
||||
- 빌드 산출물 경로, timestamp, 크기, 실행 가능 여부를 기록한다.
|
||||
|
||||
5. **빌드 후 기본 동작 테스트**
|
||||
6. **빌드 후 기본 동작 테스트**
|
||||
- 빌드된 Edge binary로 `config check`, `config refresh --help`, `config refresh --mode dry-run`을 실행한다.
|
||||
- 빌드 후에도 `go test ./...`를 실행한다. 실행하지 못하면 사유와 남은 위험을 보고한다.
|
||||
- dry-run이 `rejected` 또는 예상 밖 `restart_required`를 반환하면 배포를 멈추고 config diff를 보고한다.
|
||||
|
||||
6. **배포와 재시작**
|
||||
7. **배포와 재시작**
|
||||
- Edge와 mac-codex-node(CLI adapter + mac-mlx-vllm provider vllm-mlx process)는 원격 runner에서 빌드 산출물 기준으로 재시작한다.
|
||||
- GX10 node는 Linux ARM64 node binary를 배포하고 기존 node process를 재시작한다.
|
||||
- GX10 Laguna vLLM container를 재생성할 때 host template `/home/toki/iop-gx10-vllm/laguna-s-2.1-thinking.jinja`를 container `/run/iop/laguna-s-2.1-thinking.jinja`에 read-only bind하고 `--chat-template`로 지정한다. stock template로 되돌리면 enabled 요청이 첫 생성 토큰으로 `</think>`를 내보내 Pi thinking이 비는 회귀가 생길 수 있다.
|
||||
|
|
@ -78,13 +106,13 @@ dev-runtime provider pool을 제품 검증이 끝난 상태로 배포한다. 배
|
|||
- RTX5090 node는 현재 host에서 `ssh iop-dev-rtx5090`으로 접속한다. 2026-07-26 기준 IOP 관련 Windows 부팅 owner는 없고, operator는 `C:/Users/r0bin/iop-field/remote-llm-toggle.ps1` 또는 이를 한 번 호출하는 `RemoteLLM_mode.ahk`로 수동 전환한다. IOP dev 배포는 Startup shortcut, Run entry, Task Scheduler, Windows service를 생성하거나 복원하지 않는다. 기본 Toggle은 상태를 반전시키므로 배포 자동화에서 호출하지 말고 `-Action Status|Up|Down`을 명시한다. Node binary만 즉시 재시작할 때는 `Win32_Process.Create` 또는 동등한 세션 독립 방식을 사용하고 SSH 세션 내부의 `Start-Process`에 장기 실행을 의존하지 않는다.
|
||||
- RTX5090 Lemonade는 `host=0.0.0.0`, CUDA backend, Q5 GGUF + Q8 KV, context `262144` 기준을 inventory와 대조한다. localhost-only bind는 Node에서 provider endpoint에 접속할 수 없으므로 배포 완료로 보지 않는다.
|
||||
|
||||
7. **배포 후 연결 검증**
|
||||
8. **배포 후 연결 검증**
|
||||
- Edge, OpenAI-compatible listener, Node TCP, admin port, Control Plane status port가 열려 있는지 확인한다.
|
||||
- Control Plane status에서 Edge가 connected이고 dev-runtime 기준 4개 node가 connected인지 확인한다.
|
||||
- 각 node의 `provider_snapshots`에서 provider `id`, `capacity`, `in_flight`, `queued`, `health`, `served_models`를 확인한다.
|
||||
- `/v1/models`가 대상 model alias를 노출하는지 확인한다.
|
||||
|
||||
8. **OpenAI-compatible capacity smoke**
|
||||
9. **OpenAI-compatible capacity smoke**
|
||||
- `/v1/responses`와 `/v1/chat/completions`를 각각 검증한다. legacy `/v1/completions`는 구현되어 있지 않으면 실패로 보지 않는다.
|
||||
- 표준 부하 프롬프트는 짧은 토큰 응답을 요구하지 않는다. 700~1200 token 수준의 구조화된 답변을 유도해 요청이 동시에 관측될 시간을 만든다.
|
||||
- endpoint별로 선택한 model group의 총 provider capacity + 1개 요청을 동시에 보낸다. 현재 Laguna `laguna-s:2.1`은 GX10 capacity `4`이므로 5개, Ornith `ornith:35b`는 OneXPlayer `3` + RTX5090 `1`이므로 5개, Qwen `qwen3.6:35b`는 mac-mlx-vllm `2`이므로 3개 동시 호출이다.
|
||||
|
|
@ -95,16 +123,31 @@ dev-runtime provider pool을 제품 검증이 끝난 상태로 배포한다. 배
|
|||
- Qwen과 Laguna reasoning/thinking 텍스트는 정상 응답으로 허용한다. Laguna think smoke는 같은 요청의 Pi `high`에서 `thinking_start`/`thinking_delta`/`thinking_end`, `off`에서 thinking event 0개와 최종 text를 대조한다. agentic smoke는 tool-call 전후 reasoning, tool result, 최종 text를 모두 확인한다. exact-output match를 smoke 성공 기준으로 삼지 않는다.
|
||||
- Pi/Cline형 agent/tool-call 경계를 검증할 때는 forced tool call, auto tool call, streaming `delta.tool_calls`, multi-turn tool result 후 최종 답변을 provider direct와 Edge OpenAI-compatible 경로에서 나눠 확인한다. raw native marker나 reasoning text가 assistant content로 새면 해당 model/runtime의 parser/template profile 미확정으로 보고한다.
|
||||
|
||||
9. **결과 보고**
|
||||
10. **git-flow release finish와 tag 반영**
|
||||
- 빌드 전·후 테스트, 배포 후 연결 검증, `/v1/responses`와 `/v1/chat/completions` capacity smoke가 모두 성공했는지 다시 확인한다.
|
||||
- 하나라도 실패했거나 필수 검증이 실행되지 않았으면 finish하지 않고 `release/dev-<count>` branch를 유지한다.
|
||||
- 현재 release HEAD가 `DEPLOY_SHA`와 같은지 확인한다. 달라졌으면 배포 산출물과 source가 달라진 것이므로 finish하지 않는다.
|
||||
- finish 직전에 `git fetch origin dev main --tags`를 다시 실행하고 `origin/dev=DEV_BASE_SHA`, `origin/main=MAIN_BASE_SHA`, remote tag 없음이 모두 유지되는지 확인한다. 하나라도 달라졌으면 finish하지 않고 release branch를 유지한다.
|
||||
- 모든 검증과 ref 고정이 성공하면 `git flow release finish --keepremote -m "Release dev-<count>" dev-<count>`로 local finish와 tag 생성을 수행한다.
|
||||
- 생성된 local `dev-<count>` tag의 tree가 `DEPLOY_TREE`와 같은지 확인한다. 다르면 원격에 push하지 않는다.
|
||||
- tag tree가 같으면 `git push --atomic origin refs/heads/main:refs/heads/main refs/heads/dev:refs/heads/dev refs/tags/dev-<count>:refs/tags/dev-<count> :refs/heads/release/dev-<count>`로 production/develop/tag 반영과 remote release branch 삭제를 한 번에 수행한다.
|
||||
- local finish 검증이나 atomic push가 실패하면 `DEPLOY_SHA`로 detach한 뒤 local `main=MAIN_BASE_SHA`, `dev=DEV_BASE_SHA`, `release/dev-<count>=DEPLOY_SHA`를 복원하고 생성된 local tag를 삭제한 다음 release branch로 돌아간다. remote는 atomic push 전 상태여야 한다.
|
||||
- 성공 후 local과 origin의 `main`, `dev` 반영 상태, local/remote tag 존재, local/remote release branch 삭제를 확인한다.
|
||||
|
||||
11. **결과 보고**
|
||||
- source ref, clean sync 결과, 테스트 결과, 빌드 산출물, process/port 상태, connected node 목록, provider capacity snapshot, capacity smoke 관측값을 보고한다.
|
||||
- release version, release branch publish, finish, `main`/`dev` 반영, local/remote tag 상태를 보고한다.
|
||||
- 실패한 단계가 있으면 다음 단계를 진행했는지 여부를 명확히 구분한다.
|
||||
- capacity smoke가 타이밍 문제로 관측 실패했으면 요청 성공과 별도로 `capacity 관측 미충족`으로 보고하고, 프롬프트 길이 또는 status polling 간격 조정을 제안한다.
|
||||
|
||||
## 실행 결과 검증
|
||||
|
||||
- [ ] 원격 runner checkout이 배포 기준 ref로 clean sync되었는가
|
||||
- [ ] 원격 runner local `dev`가 `origin/dev`로 clean sync되었는가
|
||||
- [ ] `origin/main`이 `origin/dev`의 ancestor이고 local `main`/`dev`가 원격 기준과 일치하는가
|
||||
- [ ] `dev` HEAD commit count로 `dev-<count>` version을 계산했는가
|
||||
- [ ] `release/dev-<count>` branch를 새로 게시했거나 동일 version의 기존 branch를 안전하게 재개했는가
|
||||
- [ ] 빌드 전 `go test ./...`와 필요한 추가 전체 테스트가 통과했는가
|
||||
- [ ] dev-runtime Edge/mac/Linux ARM64/Windows AMD64 binary가 같은 source ref에서 rebuild되었는가
|
||||
- [ ] dev-runtime Edge/mac/Linux ARM64/Windows AMD64 binary가 같은 release branch commit에서 rebuild되었는가
|
||||
- [ ] 빌드 후 config check, refresh help, refresh dry-run, 전체 테스트가 통과했는가
|
||||
- [ ] Edge, mac-codex-node, GX10 vLLM node, OneXPlayer Lemonade node, RTX5090 Lemonade node가 재시작되고 4개 node(mac-codex, gx10-vllm, onexplayer-lemonade, rtx5090-lemonade)가 connected 상태인가
|
||||
- [ ] OneXPlayer 접속과 실행이 `r0bin@192.168.0.59` 및 세션 독립 실행 방식으로 수행되었는가
|
||||
|
|
@ -112,12 +155,17 @@ dev-runtime provider pool을 제품 검증이 끝난 상태로 배포한다. 배
|
|||
- [ ] `/v1/responses` capacity smoke에서 총 capacity만큼 `in_flight`가 차고 초과 요청이 queue에 잡혔는가
|
||||
- [ ] `/v1/chat/completions` capacity smoke에서 총 capacity만큼 `in_flight`가 차고 초과 요청이 queue에 잡혔는가
|
||||
- [ ] 완료 후 provider `in_flight=0`, `queued=0`으로 회복되었는가
|
||||
- [ ] 모든 필수 검증 성공 후에만 release finish를 실행했는가
|
||||
- [ ] finish 직전 origin `main`/`dev`가 시작 시점 SHA와 같은지 재검증했는가
|
||||
- [ ] `dev-<count>` tag tree가 실제 배포한 release tree와 같은가
|
||||
- [ ] atomic push로 origin `main`/`dev`와 tag가 함께 반영되고 remote release branch가 삭제되었는가
|
||||
- 검증 실패 시: 실패 단계, 실패한 host/provider/endpoint, 관측된 snapshot, 진행 중단 여부를 보고한다.
|
||||
|
||||
## 출력 형식
|
||||
|
||||
```text
|
||||
dev-runtime 배포 결과
|
||||
- Release: version=<dev-count>, branch=<release/dev-count>, finish=<done|not-run|partial>, tag=<local/remote status>
|
||||
- Source: <branch/ref/commit>, clean=<yes|no>
|
||||
- Pre-build tests: <command> - <pass|fail|not-run>
|
||||
- Build: edge=<path>, mac-node=<path>, linux-arm64-node=<path>, windows-amd64-node=<path>
|
||||
|
|
@ -135,7 +183,15 @@ dev-runtime 배포 결과
|
|||
|
||||
- dirty checkout이나 stale binary를 그대로 배포하지 않는다.
|
||||
- `git clean -fdx`를 기본 cleanup으로 사용하지 않는다.
|
||||
- `dev` 이외의 branch나 임의 source ref를 dev release 기준으로 사용하지 않는다.
|
||||
- shallow clone이나 `origin/dev`와 HEAD가 다른 상태에서 release version을 계산하지 않는다.
|
||||
- `origin/main`이 `origin/dev`의 ancestor가 아닌 상태에서 release를 시작하지 않는다.
|
||||
- 기존 tag를 자동 삭제, 이동, 덮어쓰기하지 않는다.
|
||||
- 같은 release의 local/remote branch가 diverge한 상태를 자동 reset하지 않는다.
|
||||
- 빌드 전 전체 테스트 실패 후 배포를 계속하지 않는다.
|
||||
- 필수 테스트, 배포 후 연결 검증, capacity smoke 중 하나라도 실패하거나 실행되지 않았는데 release를 finish하거나 tag를 생성하지 않는다.
|
||||
- tag tree와 실제 배포 tree가 다른 상태에서 원격 tag를 push하지 않는다.
|
||||
- `main`, `dev`, tag를 개별 push하여 원격에 partial finish 상태를 만들지 않는다.
|
||||
- OneXPlayer에 `toki` 사용자명으로 접속하거나 remote runner에서 다시 OneXPlayer로 SSH 접속하지 않는다.
|
||||
- OneXPlayer 장기 실행을 Windows OpenSSH 세션 내부 `Start-Process`에 의존하지 않는다.
|
||||
- RTX5090 Node용 Windows Task Scheduler 항목을 생성하거나 재생성하지 않는다.
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ test_env: dev
|
|||
test_profile: client-smoke
|
||||
domain: client
|
||||
verification_type: smoke
|
||||
last_rule_updated_at: 2026-06-12
|
||||
last_rule_updated_at: 2026-07-30
|
||||
---
|
||||
|
||||
# client-smoke dev 테스트
|
||||
|
|
@ -39,6 +39,8 @@ last_rule_updated_at: 2026-06-12
|
|||
|
||||
명령은 원격 runner 사용 시 `/Users/toki/agent-work/iop-dev` 기준으로 실행한다. 현재 작업 컨테이너의 변경분이 원격 checkout에 동기화되지 않았으면 원격 검증 완료로 보지 않는다.
|
||||
|
||||
원격 runner의 `../nexo`가 Docker build context 밖을 가리키는 symlink이면 BuildKit은 그 의존성을 따라가지 않는다. Web image build 전에는 필요한 `packages/messaging_flutter` subtree가 build context 안의 실제 디렉터리인지 확인한다. 일시적으로 materialize한 경우에는 build 직후 원래 symlink를 복구하고, 원본 Nexo checkout은 수정하지 않는다.
|
||||
|
||||
## 명령
|
||||
|
||||
- setup: `cd apps/client && flutter pub get`
|
||||
|
|
@ -59,6 +61,7 @@ last_rule_updated_at: 2026-06-12
|
|||
- `packages/flutter/iop_console` 자체 API나 widget 구조가 바뀌면 `cd packages/flutter/iop_console && flutter test` 실행 가능 여부를 확인한다.
|
||||
- analyzer 영향이 있는 dependency, app shell, generated import 변경이면 `cd apps/client && flutter analyze --no-fatal-infos`를 함께 확인한다.
|
||||
- Web build/deploy, `apps/client/Dockerfile`, `docker-compose.yml`, `scripts/dev/web.sh`, `Makefile client-build-web` 변경은 원격 runner에서 dev-server 기동 또는 compose build 중 변경 범위에 맞는 경로를 확인하고, 외부 브라우저 확인 URL이 `http://toki-labs.com:13001` 계열인지 보고한다.
|
||||
- Web image를 fresh deployment 증거로 삼으려면 선택한 source ref에서 build가 성공해야 한다. dependency 또는 Flutter compile 오류로 build가 막힌 경우, 기존 healthy Web container는 기존 사용자 경로 증거로만 기록하고 새 ref 배포 성공으로 판정하지 않는다.
|
||||
- compose 경로를 확인할 때는 `IOP_EDGE_NODE_TOKEN`을 원격 runner 환경에서 주입하고, token 원문은 tracked 파일에 기록하지 않는다.
|
||||
|
||||
## 보조 검증
|
||||
|
|
@ -83,6 +86,7 @@ All tests passed!
|
|||
|
||||
- 원격 runner 접근, Flutter SDK, Docker compose, 또는 필요한 dev 포트 개방이 없어 client runtime 검증을 실행할 수 없다.
|
||||
- 필요한 sibling path dependency가 없어 `flutter pub get` 또는 test가 진행되지 않는다.
|
||||
- Nexo symlink가 Docker build context 밖을 가리키거나, 이를 context 안에서 해소한 뒤에도 Flutter compile이 실패해 fresh Web image를 만들 수 없다. 이 경우 기존 Web container 재사용으로 fresh deployment 차단을 해소하지 않는다.
|
||||
|
||||
## 보고 항목
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ test_env: dev
|
|||
test_profile: edge-smoke
|
||||
domain: edge
|
||||
verification_type: smoke
|
||||
last_rule_updated_at: 2026-07-26
|
||||
last_rule_updated_at: 2026-07-30
|
||||
---
|
||||
|
||||
# edge-smoke dev 테스트
|
||||
|
|
@ -37,7 +37,7 @@ last_rule_updated_at: 2026-07-26
|
|||
- runtime: Go `1.24`
|
||||
- package manager: Go modules / Makefile
|
||||
- docker: unit/smoke quick check는 Docker를 요구하지 않는다. compose dev 검증은 `docker compose --env-file .env.dev.example ...`로 수행한다.
|
||||
- external service: dev artifact/base URL 후보 `http://toki-labs.com:18082`, dev Edge runtime 주소 후보 `toki-labs.com:19003`
|
||||
- external service: dev artifact/base URL 후보 `http://toki-labs.com:18082`, compose Edge runtime 주소 후보 `toki-labs.com:19003`, dev-runtime provider pool native Edge 주소 후보 `toki-labs.com:18084`
|
||||
- model endpoint: dev OpenAI-compatible base URL 후보 `http://toki-labs.com:18083/v1`
|
||||
- credential: token/secret 원문은 문서에 기록하지 않는다.
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ test_env: dev
|
|||
test_profile: node-smoke
|
||||
domain: node
|
||||
verification_type: smoke
|
||||
last_rule_updated_at: 2026-07-26
|
||||
last_rule_updated_at: 2026-07-30
|
||||
---
|
||||
|
||||
# node-smoke dev 테스트
|
||||
|
|
@ -32,11 +32,11 @@ last_rule_updated_at: 2026-07-26
|
|||
## 환경
|
||||
|
||||
- host: local checkout. dev host, external CLI profile, shared Edge runtime evidence가 필요하면 원격 runner를 사용한다.
|
||||
- port: dev Edge-Node TCP transport `19003`
|
||||
- port: compose dev Edge-Node TCP transport `19003`; dev-runtime provider pool native Edge-Node TCP transport `18084`
|
||||
- runtime: Go `1.24`
|
||||
- package manager: Go modules / Makefile
|
||||
- docker: unit/smoke quick check는 Docker를 요구하지 않는다. compose dev 검증은 `docker compose --env-file .env.dev.example ...`로 수행한다.
|
||||
- external service: dev Edge runtime 주소 후보 `toki-labs.com:19003`
|
||||
- external service: compose Edge runtime 주소 후보 `toki-labs.com:19003`; dev-runtime provider pool native Edge 주소 후보 `toki-labs.com:18084`
|
||||
- model endpoint: dev OpenAI-compatible base URL 후보 `http://toki-labs.com:18083/v1`
|
||||
- credential: token/secret 원문은 문서에 기록하지 않는다.
|
||||
|
||||
|
|
@ -127,7 +127,7 @@ Qwen runtime에는 Qwen 전용 parser/template 검증값만 사용한다. dev-co
|
|||
- 변경한 node 패키지 또는 `go test ./apps/node/...`를 실행한다.
|
||||
- 실행 요청, stream, cancel, status, session, adapter registry 경로를 바꾼 경우 repo 내부 edge-node 진단과 full-cycle 실제 구동 기준을 함께 적용한다.
|
||||
- CLI profile 변경 시 `/capabilities`, `/transport`, `/sessions`, persistent profile이면 `/terminate-session`을 확인한다.
|
||||
- dev Edge runtime으로 연결하는 경우 Node가 `19003`을 사용하고 local/test `19090` field baseline으로 붙지 않는지 확인한다.
|
||||
- compose Edge profile로 연결하는 경우 Node가 `19003`을 사용하고 local/test `19090` field baseline으로 붙지 않는지 확인한다. dev-runtime provider pool native Edge로 연결하는 경우에는 Node가 `18084`를 사용한다. 두 profile의 transport를 섞어 연결 성공을 판정하지 않는다.
|
||||
|
||||
## 보조 검증
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
test_env: dev
|
||||
last_rule_updated_at: 2026-07-18
|
||||
last_rule_updated_at: 2026-07-30
|
||||
---
|
||||
|
||||
# dev 테스트 규칙
|
||||
|
|
@ -28,10 +28,10 @@ last_rule_updated_at: 2026-07-18
|
|||
|
||||
- host: dev runtime evidence는 원격 runner `ssh toki@toki-labs.com`의 `/Users/toki/agent-work/iop-dev` 기준으로 수행한다.
|
||||
- repo root: 명령은 원격 checkout `/Users/toki/agent-work/iop-dev` 기준으로 실행한다.
|
||||
- sync 기준: dev 배포 전 원격 runner checkout은 `git fetch origin main`, `git reset --hard origin/main`, `git clean -fd`로 clean 상태를 만든 뒤 빌드한다. dev runner의 dirty 변경은 보존 대상으로 보지 않는다.
|
||||
- sync 기준: dev 배포의 clean 시작점은 원격 runner에서 `git fetch origin dev main --tags`, `git switch --force-create dev origin/dev`, `git reset --hard origin/dev`, `git clean -fd`를 수행한 상태다. git-flow release를 시작하거나 재개한 뒤에는 그 release HEAD를 배포 기준 ref로 고정하며, 선택된 release ref를 `origin/main`으로 덮어쓰지 않는다. dev runner의 dirty 변경은 보존 대상으로 보지 않는다.
|
||||
- env file: dev stack은 `docker compose --env-file .env.dev.example ...`로 명시한다.
|
||||
- compose identity: `COMPOSE_PROJECT_NAME=iop-dev-agent`, `IOP_COMPOSE_NETWORK=iop-dev-agent-net`, `IOP_COMPOSE_SUBNET=10.89.1.0/24`.
|
||||
- port: web/dev preview `13001`, Control Plane HTTP `18001`, Portal/Control Plane wire test endpoint `19001`, CP-Edge wire `19002`, Edge-Node TCP transport `19003`, Postgres host publish `15401`, Redis host publish `16301`, Control Plane metrics `19103`, Prometheus `19111`, Grafana `19121`.
|
||||
- port: web/dev preview `13001`, Control Plane HTTP `18001`, Portal/Control Plane wire test endpoint `19001`, CP-Edge wire `19002`, compose Edge-Node TCP transport `19003`, Postgres host publish `15401`, Redis host publish `16301`, Control Plane metrics `19103`, Prometheus `19111`, Grafana `19121`. dev-runtime provider pool native Edge-Node TCP는 `18084`다.
|
||||
- operator notice: 기존 테스트 사용자-facing 접속점(`13001`, `18001`, Edge OpenAI-compatible 후보 `18083`)은 변경하지 않는다. 이번 profile 변경은 Control Plane/Edge 관측용 metrics/Prometheus/Grafana 포트 추가로만 공지한다. Grafana/Prometheus는 원격 runner 내부 또는 SSH 터널로 접근한다.
|
||||
- optional dev field ports: artifact/bootstrap HTTP `18082`, Edge OpenAI-compatible HTTP `18083`, Edge metrics `19101`. 이 값은 compose 기본 stack에 publish되지 않으며 field/bootstrap 또는 Edge direct dev profile이 필요할 때만 사용한다.
|
||||
- runtime: Go quick check는 local toolchain을 우선한다. Flutter client 포함 검증과 Docker/code-server/full-cycle runtime은 원격 runner를 사용한다.
|
||||
|
|
@ -49,7 +49,8 @@ last_rule_updated_at: 2026-07-18
|
|||
| Control Plane HTTP | `18000` | `18001` |
|
||||
| CP Client WS | `19080` | `19001` |
|
||||
| CP-Edge wire | `19081` | `19002` |
|
||||
| Edge-Node TCP | `19090` | `19003` |
|
||||
| Compose Edge-Node TCP | `19090` | `19003` |
|
||||
| Native dev-runtime Edge-Node TCP | 해당 없음 | `18084` |
|
||||
| Edge artifact/bootstrap | `18080` | `18082` |
|
||||
| Edge OpenAI-compatible | `18081` | `18083` |
|
||||
| Edge metrics | `19092` | `19101` |
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ test_env: dev
|
|||
test_profile: testing-smoke
|
||||
domain: testing
|
||||
verification_type: smoke
|
||||
last_rule_updated_at: 2026-06-12
|
||||
last_rule_updated_at: 2026-07-30
|
||||
---
|
||||
|
||||
# testing-smoke dev 테스트
|
||||
|
|
@ -37,7 +37,7 @@ last_rule_updated_at: 2026-06-12
|
|||
- runtime: Go `1.24`
|
||||
- package manager: Go modules / Makefile
|
||||
- docker: quick check는 Docker를 요구하지 않는다. 현재 작업 컨테이너에서는 Docker-in-Docker를 사용하지 않으며, Docker compose 검증은 원격 runner 또는 code-server 환경에서 수행한다.
|
||||
- external service: dev Control Plane HTTP `http://toki-labs.com:18001`, dev Client wire `ws://toki-labs.com:19001/client`, dev Edge runtime 후보 `toki-labs.com:19003`
|
||||
- external service: dev Control Plane HTTP `http://toki-labs.com:18001`, dev Client wire `ws://toki-labs.com:19001/client`, compose Edge runtime 후보 `toki-labs.com:19003`, dev-runtime provider pool native Edge 후보 `toki-labs.com:18084`
|
||||
- model endpoint: dev OpenAI-compatible base URL 후보 `http://toki-labs.com:18083/v1`
|
||||
- operator notice: 기존 테스트 사용자 URL은 변경하지 않는다. Grafana `127.0.0.1:19121`, Prometheus `127.0.0.1:19111`은 원격 runner 내부 또는 SSH 터널로 접근하는 운영/검증자용 신규 관측 endpoint다.
|
||||
- credential: token/secret 원문은 문서에 기록하지 않는다.
|
||||
|
|
@ -59,6 +59,7 @@ last_rule_updated_at: 2026-06-12
|
|||
- 테스트 도구 자체를 바꾼 경우 해당 도구를 직접 실행해 성공/실패 판정을 확인한다.
|
||||
- 사용자 실행 파이프라인에 닿는 변경은 일반 Go 테스트와 변경 범위에 맞는 full-cycle 실제 구동을 함께 검증한다.
|
||||
- dev compose/profile 변경 시 `docker compose --env-file .env.dev.example config`로 렌더링된 host publish 포트와 network name을 확인한다.
|
||||
- compose 관측 그룹은 `19003`을, dev-runtime provider pool Node bootstrap은 native Edge `18084`를 사용한다. 두 transport를 같은 배포 경로의 동등한 endpoint로 취급하지 않는다.
|
||||
- `iop-edge bootstrap pack`, `make pack-edge`, 내장 artifact server 변경 시 현재 host target build와 artifact/checksum/bootstrap script를 확인한다.
|
||||
- field/bootstrap/deploy 작업은 one-line bootstrap UX 기준을 적용한다.
|
||||
- 사용자에게 전달하는 Node bootstrap 명령은 완성된 URL과 token positional value 하나만 포함한다.
|
||||
|
|
|
|||
|
|
@ -2,16 +2,17 @@ inventory_id: inventory-dev
|
|||
common_inventory: agent-test/inventory.yaml
|
||||
test_env: dev
|
||||
profile: dev-runtime-provider-pool
|
||||
last_updated_at: "2026-07-26"
|
||||
last_updated_at: "2026-07-30"
|
||||
|
||||
source:
|
||||
remote_runner:
|
||||
ssh: toki@toki-labs.com
|
||||
repo_root: /Users/toki/agent-work/iop-dev
|
||||
clean_sync:
|
||||
- git fetch origin main
|
||||
- git reset --hard origin/main
|
||||
- git fetch origin dev main --tags
|
||||
- git clean -fd
|
||||
- git switch --force-create dev origin/dev
|
||||
- git reset --hard origin/dev
|
||||
dirty_policy: discard
|
||||
|
||||
compose:
|
||||
|
|
|
|||
Loading…
Reference in a new issue