update roadmap and docs for control-plane-portal-ops phase
This commit is contained in:
parent
55f444ca2b
commit
4f0b6ba0b5
7 changed files with 147 additions and 18 deletions
22
Makefile
22
Makefile
|
|
@ -1,4 +1,4 @@
|
|||
.PHONY: all build build-local build-edge build-node build-node-target build-node-targets pack-node-target pack-edge archive-edge tidy test test-e2e test-openai-ollama proto proto-dart client-test client-build-web clean
|
||||
.PHONY: all build build-local build-edge build-edge-host build-node build-node-target build-node-targets pack-node-target pack-edge archive-edge tidy test test-e2e test-openai-ollama proto proto-dart client-test client-build-web clean
|
||||
|
||||
GOFLAGS ?= -trimpath
|
||||
BUILD_DIR ?= build
|
||||
|
|
@ -6,9 +6,13 @@ BUILD_BIN_DIR ?= $(BUILD_DIR)/bin
|
|||
ARTIFACT_DIR ?= $(BUILD_DIR)/artifacts
|
||||
PACK_DIR ?= $(BUILD_DIR)/packages
|
||||
EDGE_TARGET ?= $(shell go env GOOS)-$(shell go env GOARCH)
|
||||
EDGE_TARGET_PARTS = $(subst -, ,$(EDGE_TARGET))
|
||||
EDGE_GOOS = $(word 1,$(EDGE_TARGET_PARTS))
|
||||
EDGE_GOARCH = $(word 2,$(EDGE_TARGET_PARTS))
|
||||
EDGE_PACKAGE_NAME ?= iop-edge-$(EDGE_TARGET)
|
||||
EDGE_PACKAGE ?= $(PACK_DIR)/$(EDGE_PACKAGE_NAME).tar.gz
|
||||
EDGE_PACKAGE_TMP ?= $(BUILD_DIR)/.edge-package
|
||||
EDGE_HOST_BINARY ?= $(BUILD_BIN_DIR)/iop-edge-host
|
||||
NODE_TARGET ?= $(shell go env GOOS)-$(shell go env GOARCH)
|
||||
NODE_TARGETS ?= linux-arm64 linux-amd64 darwin-arm64 darwin-amd64 windows-arm64 windows-amd64
|
||||
NODE_TARGET_PARTS = $(subst -, ,$(NODE_TARGET))
|
||||
|
|
@ -18,13 +22,19 @@ NODE_GOARCH = $(word 2,$(NODE_TARGET_PARTS))
|
|||
all: build
|
||||
|
||||
build: build-node-targets
|
||||
$(MAKE) build-edge
|
||||
$(MAKE) archive-edge
|
||||
|
||||
build-local: build-edge build-node
|
||||
|
||||
build-edge:
|
||||
@test -n "$(EDGE_GOOS)" && test -n "$(EDGE_GOARCH)" || (echo "EDGE_TARGET must be <goos>-<goarch>" >&2; exit 2)
|
||||
mkdir -p $(BUILD_BIN_DIR)
|
||||
go build $(GOFLAGS) -o $(BUILD_BIN_DIR)/iop-edge ./apps/edge/cmd/edge
|
||||
GOOS=$(EDGE_GOOS) GOARCH=$(EDGE_GOARCH) go build $(GOFLAGS) -o $(BUILD_BIN_DIR)/iop-edge ./apps/edge/cmd/edge
|
||||
|
||||
build-edge-host:
|
||||
mkdir -p $(BUILD_BIN_DIR)
|
||||
go build $(GOFLAGS) -o $(EDGE_HOST_BINARY) ./apps/edge/cmd/edge
|
||||
|
||||
build-node:
|
||||
mkdir -p $(BUILD_BIN_DIR)
|
||||
|
|
@ -35,16 +45,16 @@ build-node-target:
|
|||
mkdir -p $(BUILD_BIN_DIR)
|
||||
GOOS=$(NODE_GOOS) GOARCH=$(NODE_GOARCH) go build $(GOFLAGS) -o $(BUILD_BIN_DIR)/iop-node-$(NODE_TARGET) ./apps/node/cmd/node
|
||||
|
||||
build-node-targets: build-edge
|
||||
build-node-targets: build-edge-host
|
||||
rm -rf "$(ARTIFACT_DIR)"
|
||||
@for target in $(NODE_TARGETS); do \
|
||||
echo "==> node target $$target"; \
|
||||
$(MAKE) build-node-target NODE_TARGET=$$target; \
|
||||
$(BUILD_BIN_DIR)/iop-edge bootstrap pack --target $$target --node-binary $(BUILD_BIN_DIR)/iop-node-$$target --output $(ARTIFACT_DIR); \
|
||||
$(EDGE_HOST_BINARY) bootstrap pack --target $$target --node-binary $(BUILD_BIN_DIR)/iop-node-$$target --output $(ARTIFACT_DIR); \
|
||||
done
|
||||
|
||||
pack-node-target: build-edge build-node-target
|
||||
$(BUILD_BIN_DIR)/iop-edge bootstrap pack --target $(NODE_TARGET) --node-binary $(BUILD_BIN_DIR)/iop-node-$(NODE_TARGET) --output $(ARTIFACT_DIR)
|
||||
pack-node-target: build-edge-host build-node-target
|
||||
$(EDGE_HOST_BINARY) bootstrap pack --target $(NODE_TARGET) --node-binary $(BUILD_BIN_DIR)/iop-node-$(NODE_TARGET) --output $(ARTIFACT_DIR)
|
||||
|
||||
pack-edge: build-edge archive-edge
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ RAG, context 구성/압축, web search, MCP 정책, tool policy, output validati
|
|||
- 경로: `agent-roadmap/phase/automation-runtime-bridge/PHASE.md`
|
||||
- 요약: Runtime과 Automation 실행 흐름을 공통화하고, agent 설치형/비설치형 대상 제어 경로를 분리해 확장하는 단계다.
|
||||
|
||||
- [계획] Control Plane과 Client 운영
|
||||
- [진행중] Control Plane과 Client 운영
|
||||
- 경로: `agent-roadmap/phase/control-plane-portal-ops/PHASE.md`
|
||||
- 요약: 여러 Edge를 관찰하고 운영하는 중앙 제어면과 Flutter client 운영면을 구축하는 단계다.
|
||||
|
||||
|
|
|
|||
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
## 활성 Phase
|
||||
|
||||
- [계획] Control Plane과 Client 운영
|
||||
- [진행중] Control Plane과 Client 운영
|
||||
- 경로: `agent-roadmap/phase/control-plane-portal-ops/PHASE.md`
|
||||
|
||||
## 활성 Milestone
|
||||
|
||||
- [계획] Client Integration Clone Adoption
|
||||
- [진행중] Nexo 알림/메시지 Smoke 정합성
|
||||
- Phase: `agent-roadmap/phase/control-plane-portal-ops/PHASE.md`
|
||||
- 경로: `agent-roadmap/phase/control-plane-portal-ops/milestones/client-integration-clone-adoption.md`
|
||||
- 경로: `agent-roadmap/phase/control-plane-portal-ops/milestones/nexo-notification-message-smoke-alignment.md`
|
||||
|
||||
## 선택 규칙
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## 상태
|
||||
|
||||
[계획]
|
||||
[진행중]
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
@ -21,9 +21,13 @@
|
|||
- 경로: `agent-roadmap/archive/phase/control-plane-portal-ops/milestones/edge-local-dev-config-runtime.md`
|
||||
- 요약: Control Plane이 없는 동안 `edge.yaml`을 테스트용 source of truth로 삼고, config 템플릿 생성, effective environment 출력, Node register/bootstrap 출력, setup, smoke test를 `iop-edge` command 중심으로 모은다.
|
||||
|
||||
- [진행중] Nexo 알림/메시지 Smoke 정합성
|
||||
- 경로: `agent-roadmap/phase/control-plane-portal-ops/milestones/nexo-notification-message-smoke-alignment.md`
|
||||
- 요약: `../nexo` client-validation의 FCM ACK smoke와 IOP `apps/client`의 Nexo messaging 소비 설정 차이를 선행 게이트로 정리한다.
|
||||
|
||||
- [계획] Client Integration Clone Adoption
|
||||
- 경로: `agent-roadmap/phase/control-plane-portal-ops/milestones/client-integration-clone-adoption.md`
|
||||
- 요약: NomadCode client 표준을 IOP client에 복제하기 위한 모듈명, bootstrap, proto-socket, Mattermost push host integration 기준을 정리한다.
|
||||
- 요약: Nexo 알림/메시지 smoke 정합성 확인 뒤 NomadCode client 표준을 IOP client에 복제하기 위한 모듈명, bootstrap, proto-socket, Mattermost push host integration 기준을 정리한다.
|
||||
|
||||
- [계획] Control Plane과 Client
|
||||
- 경로: `agent-roadmap/phase/control-plane-portal-ops/milestones/control-plane-client.md`
|
||||
|
|
@ -43,3 +47,4 @@
|
|||
- Flutter client는 IOP 자체 운영 UI/UX이며 NomadCode 전용 shell로 만들지 않는다.
|
||||
- Multi-Edge 운영은 Edge의 로컬 상태 소유권을 침범하지 않는 범위에서 확장한다.
|
||||
- `../nomadcode`에서 정리한 client 표준을 복제할 때는 제품 feature 전체가 아니라 client skeleton, integration boundary, bootstrap convention, 문서화된 handoff 기준만 가져온다.
|
||||
- `../nexo`의 messaging/push smoke가 valid signature 또는 scope decision까지 정리되기 전에는 Mattermost push host integration을 IOP client에 확정 적용하지 않는다.
|
||||
|
|
|
|||
|
|
@ -19,7 +19,8 @@ NomadCode의 `Client Integration Standardization` 결과를 IOP Flutter client
|
|||
- 결정 필요: 아래 체크리스트
|
||||
- [ ] NomadCode client 표준화 산출물을 받은 뒤 IOP client에 복제할 파일/구조/설정 범위를 확정한다.
|
||||
- [x] 이전 Flutter 앱 경로는 `apps/client`로 전환하고 호환 경로는 두지 않는다.
|
||||
- [ ] IOP client에서 Mattermost push routing을 내부 화면, 외부 링크, 운영 이벤트 중 어디로 연결할지 결정한다.
|
||||
- [ ] Nexo 알림/메시지 Smoke 정합성 Milestone에서 valid signature 또는 scope decision과 IOP consumer 설정 차이가 정리됐는지 확인한다.
|
||||
- [x] IOP client의 Mattermost push routing은 내부 화면, 외부 링크, 운영 이벤트를 모두 지원한다. 세부 구현은 notification type/context별 primary route, fallback route, audit/ops event 기록 정책으로 정리한다.
|
||||
|
||||
## 범위
|
||||
|
||||
|
|
@ -77,9 +78,10 @@ NomadCode 표준과 IOP 차이를 추적 가능하게 남긴다.
|
|||
|
||||
## 작업 컨텍스트
|
||||
|
||||
- 관련 경로: `apps/client/`, `apps/control-plane/`, `docs/`, `scripts/dev/web.sh`, `../nomadcode/apps/client`, `../mattermost-push-plugin/`
|
||||
- 관련 경로: `apps/client/`, `apps/control-plane/`, `docs/`, `scripts/dev/web.sh`, `../nomadcode/apps/client`, `../nexo/packages/messaging_flutter/`, `../nexo/apps/flutter-test/`, `../nexo/HANDOFF.md`
|
||||
- 표준선(선택): IOP 제품 표면은 client로 부르고, 이전 UI 명칭은 roadmap/archive history나 외부 tool API 고정명에만 제한한다.
|
||||
- 표준선(선택): NomadCode에서 가져올 것은 client skeleton, integration boundary, bootstrap convention, handoff 문서이며 제품 feature는 복제하지 않는다.
|
||||
- 선행 작업: NomadCode `Client Integration Standardization`
|
||||
- 표준선(선택): Mattermost push routing은 내부 화면, 외부 링크, 운영 이벤트를 모두 지원하고, 배타 선택이 아니라 notification type/context별 routing policy로 구현한다.
|
||||
- 선행 작업: Nexo 알림/메시지 Smoke 정합성, NomadCode `Client Integration Standardization`
|
||||
- 후속 작업: Control Plane과 Client, Multi-Edge 운영
|
||||
- 확인 필요: 구현 잠금의 결정 필요 항목 참고.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,82 @@
|
|||
# Milestone: Nexo 알림/메시지 Smoke 정합성
|
||||
|
||||
## 위치
|
||||
|
||||
- Roadmap: `agent-roadmap/ROADMAP.md`
|
||||
- Phase: `agent-roadmap/phase/control-plane-portal-ops/PHASE.md`
|
||||
|
||||
## 목표
|
||||
|
||||
`../nexo`의 메시징/푸시 알림 검증 상태를 IOP client integration의 선행 게이트로 정리한다. Nexo `client-validation`의 FCM ACK smoke 결과와 남은 valid signed payload 결정을 확인하고, IOP `apps/client`가 `nexo_messaging` 소비 앱 조건을 만족하기 위해 필요한 설정 차이를 확정한다.
|
||||
|
||||
## 상태
|
||||
|
||||
[진행중]
|
||||
|
||||
## 구현 잠금
|
||||
|
||||
- 상태: 잠금
|
||||
- 결정 필요: 아래 체크리스트
|
||||
- [x] Nexo에서 valid signed push trigger를 제공해 notification display/opened/reply/dismiss까지 검증하는 방향으로 진행한다.
|
||||
- [x] IOP client의 Mattermost push routing은 내부 화면, 외부 링크, 운영 이벤트를 모두 지원한다. 남은 작업은 notification type/context별 기본 라우팅, fallback, 이벤트 기록 정책을 정의하는 것이다.
|
||||
|
||||
## 범위
|
||||
|
||||
- `../nexo`의 `client-validation` Milestone, `04+03_fcm_ack_smoke` handoff, `packages/messaging_flutter` host responsibility 확인
|
||||
- IOP `apps/client`의 `nexo_messaging`, Firebase, Android application id, Google Services plugin, platform guard, plugin initialization 설정 차이 정리
|
||||
- IOP client의 device token, auth token, signing key, notification opened routing callback 책임 경계 정리
|
||||
- `Client Integration Clone Adoption`을 시작하기 전 필요한 선행 게이트와 후속 분리 항목 문서화
|
||||
|
||||
## 기능
|
||||
|
||||
### Epic: [nexo-smoke] Nexo smoke gate
|
||||
|
||||
Nexo 쪽 알림/메시지 smoke 상태를 IOP client adoption의 선행 조건으로 분류한다.
|
||||
|
||||
- [ ] [handoff-status] `../nexo/HANDOFF.md`와 `../nexo/agent-roadmap/phase/product-foundation/milestones/client-validation.md` 기준으로 FCM ACK smoke의 PASS/BLOCKED 항목을 최신 상태로 확인한다.
|
||||
- [ ] [signed-scope] valid signed push trigger를 확보해 notification display, opened routing, inline reply, dismiss까지 검증한 결과를 남긴다. 진행 방향: FCM receipt + ACK까지만 인정하지 않고 full notification smoke를 완료한다.
|
||||
|
||||
### Epic: [iop-consumer] IOP consumer 설정 정합성
|
||||
|
||||
IOP `apps/client`가 Nexo messaging plugin의 host app responsibility를 충족하는지 확인하고 부족한 설정을 adoption 작업 입력으로 만든다.
|
||||
|
||||
- [ ] [dependency-gap] IOP `apps/client/pubspec.yaml`과 Android 설정에서 `nexo_messaging`, `firebase_core`, Google Services plugin, Firebase config, application id 차이를 정리한다.
|
||||
- [ ] [bootstrap-gap] Web + Android bootstrap에서 Firebase 초기화, `NexoMessagingPlugin.instance.initialize()`, platform guard, deterministic test escape hatch 필요 여부를 정리한다.
|
||||
- [ ] [credential-boundary] device token, auth token, signing key 저장과 전달 책임을 IOP Control Plane/client 경계에 맞춰 정의한다.
|
||||
- [ ] [routing-boundary] notification opened event가 내부 화면, 외부 링크, 운영 이벤트를 모두 사용할 수 있도록 notification type/context별 기본 라우팅, fallback, 이벤트 기록 정책을 정리한다.
|
||||
|
||||
### Epic: [adoption-gate] Clone adoption handoff
|
||||
|
||||
기존 `Client Integration Clone Adoption` Milestone이 시작할 수 있는 입력과 남은 블로커를 추적 가능하게 만든다.
|
||||
|
||||
- [ ] [clone-input] `Client Integration Clone Adoption`에서 가져갈 Nexo messaging skeleton, IOP 치환 항목, 후속 분리 항목을 checklist로 남긴다.
|
||||
- [ ] [lock-sync] 이 Milestone과 `../nexo` `client-validation`의 외부 의존 잠금 상태가 workspace lock에 반영되어 있는지 확인한다.
|
||||
|
||||
## 완료 리뷰
|
||||
|
||||
- 상태: 없음
|
||||
- 요청일: 없음
|
||||
- 완료 근거: 없음
|
||||
- 리뷰 필요:
|
||||
- [ ] 사용자가 완료 결과를 확인했다
|
||||
- [ ] archive 이동을 승인했다
|
||||
- 리뷰 코멘트: 없음
|
||||
|
||||
## 범위 제외
|
||||
|
||||
- Nexo plugin runtime 대규모 재작성
|
||||
- IOP client의 전체 제품 UI 재설계
|
||||
- iOS/macOS native push 구현
|
||||
- Control Plane-Edge wire protocol 세부 확정
|
||||
- raw FCM token, auth token, signing key, private endpoint 값을 tracked 문서에 기록하는 일
|
||||
|
||||
## 작업 컨텍스트
|
||||
|
||||
- 관련 경로: `apps/client/`, `apps/client/android/`, `../nexo/HANDOFF.md`, `../nexo/packages/messaging_flutter/`, `../nexo/apps/flutter-test/`, `../nexo/agent-roadmap/phase/product-foundation/milestones/client-validation.md`
|
||||
- 표준선(선택): Nexo `nexo_messaging`은 Android-first plugin runtime이고 host app은 Firebase config, plugin initialization, auth/signing key 저장, device token 전달, opened routing callback만 소유한다.
|
||||
- 표준선(선택): IOP Web target은 messaging native runtime을 직접 실행하지 않고 platform guard와 no-op 또는 후속 확장 경계를 명확히 둔다.
|
||||
- 표준선(선택): Mattermost push routing은 내부 화면, 외부 링크, 운영 이벤트를 배타적으로 고르지 않고 모두 지원한다. 구현에서는 type/context별 primary route, fallback route, audit/ops event 기록 여부를 정책으로 분리한다.
|
||||
- 외부 의존 잠금: `nexo:agent-roadmap/phase/product-foundation/milestones/client-validation.md`
|
||||
- 선행 작업: Nexo `client-validation`의 valid signed push trigger 기반 full notification smoke
|
||||
- 후속 작업: `Client Integration Clone Adoption`
|
||||
- 확인 필요: Nexo에서 valid signed push trigger를 준비하고 display/opened/reply/dismiss evidence를 수집해야 한다.
|
||||
|
|
@ -73,7 +73,37 @@ tail -f logs/edge.log
|
|||
## Build Options
|
||||
|
||||
```bash
|
||||
make build NODE_TARGETS="darwin-arm64"
|
||||
make build-edge && make pack-edge
|
||||
make pack-node-target NODE_TARGET=darwin-arm64 && make pack-edge
|
||||
make build
|
||||
make build EDGE_TARGET=darwin-arm64
|
||||
make build EDGE_TARGET=darwin-arm64 NODE_TARGETS="darwin-arm64"
|
||||
make pack-node-target NODE_TARGET=darwin-arm64 && make pack-edge EDGE_TARGET=darwin-arm64
|
||||
```
|
||||
|
||||
`EDGE_TARGET`는 package에 들어갈 Edge binary와 Edge package 이름을 정한다.
|
||||
`NODE_TARGETS`/`NODE_TARGET`는 Node bootstrap artifact 대상을 정한다.
|
||||
|
||||
Apple Silicon Mac:
|
||||
|
||||
```bash
|
||||
make build EDGE_TARGET=darwin-arm64
|
||||
```
|
||||
|
||||
Intel Mac:
|
||||
|
||||
```bash
|
||||
make build EDGE_TARGET=darwin-amd64
|
||||
```
|
||||
|
||||
Node bootstrap artifact도 macOS용만 포함하려면 `NODE_TARGETS`를 함께 좁힌다.
|
||||
|
||||
```bash
|
||||
make build EDGE_TARGET=darwin-arm64 NODE_TARGETS="darwin-arm64"
|
||||
make build EDGE_TARGET=darwin-amd64 NODE_TARGETS="darwin-amd64"
|
||||
```
|
||||
|
||||
결과 예시:
|
||||
|
||||
```bash
|
||||
build/packages/iop-edge-darwin-arm64.tar.gz
|
||||
build/packages/iop-edge-darwin-amd64.tar.gz
|
||||
```
|
||||
|
|
|
|||
Loading…
Reference in a new issue