개발자 플랫폼 Wave — 완료 요약 (d1–d7)
읽기 안내
MCP·CLI·SDK·문서·예제·CI의 Wave 3 개발 결과 보고서입니다. 공개 출시 공지는 아닙니다.
실행된 로컬 검증과 공개 패키지 배포·스테이징·외부 사용자 검증이 미완료인 상태를 구분해서 읽으세요.
상태:
IMPLEMENTED+VERIFIED_WITHIN_SCOPE— 아래 모든 클레임은 이 wave의 실행된 증거를 인용합니다; 잔여 레지스터(§4)는 의도적으로 깁니다 — 정직한 NOT_VERIFIED 항목은 숨길 부끄러움이 아닌 산출물의 일부이기 때문입니다.베이스: 머지
9e390d8(d7 태스크 워크트리), 7개 wave 태스크 모두 통합. 컴패니언 문서:developer-platform-gap.md(phase-0 베이스라인),version-policy.md,release-artifacts.md,interface-contract-matrix.md,known-limitations.md,ci-coverage.md,CHANGELOG.md.
1. 통합된 태스크
| 태스크 | 범위 | 랜딩 상태 |
|---|---|---|
| d1 contract-stabilization | 네이밍 정책, createWorkerConfig() Worker 프리셋(web+server), 계약 매트릭스, 낡은 문서 스윕 | 머지됨(53e5d8c + 040a67f + 1238720/1b22603/01ec539d 체인) |
| d2 cli-platform | @yetdapay/cli auth/project/license/integration 명령, 자격 증명 저장소, vendored npm pack | 머지됨(b9d9114) |
| d3 mcp-remote | be-cloudflare integration 표면 포트 + migration 018, 10개 게이트웨이 읽기 도구, mcp CI 잡, 테스트 | 머지됨(da8c90e) |
| d4 mcp-local | @yetdapay/mcp stdio 서버(CLI 판정 패리티) + 3개 에이전트 스킬 | 머지됨(5765427 via 4183a41) |
| d5 docs-site | docs/ 아래 VitePress 사이트(~55 페이지, nav+sidebar, pnpm build) | 머지됨(2e5501a via bb3ea35) |
| d5b proto-drift-fix | 기부 donor_name/message → 선택적 + 서버 기본값(양쪽 백엔드 + proto) | 머지됨(d5f70a3 via d7c92f1) |
| d6 examples-e2e | 4개 실행 가능 시나리오 + run-all.sh 하니스, lockfile, 픽스처 | 머지됨(1eacd4f via 043ca86) |
| d7 release-candidate | 버전 정책, CHANGELOG, 팩 아티팩트, 통합 CI, README, 이 문서 | 이 커밋 |
2. 인터페이스별 산출물
MCP
- 로컬 protect MCP —
tools/devpay-mcp/(@yetdapay/mcp0.1.0): stdio JSON-RPC →yp --json, 판정 그대로, 워크스페이스 격리, 쉘 없는 spawn, plan-sha 승인 바인딩. Tarball: d7files수정 후 3 파일. - 로컬 Rust MCP —
mcp/(yetdapay-mcp0.1.0): 10개yetdapay_*도구, Axumbe/로의 순수 HTTP 어댑터, 설계상 exec-free. - 원격 게이트웨이 —
mcp/gateway/worker.js(yetdapay-mcp-gateway0.1.0): 20개 도구 = 10 configure/validate + d3에서 추가된 10 셀러 스코프/공개 읽기; Bearer 패스스루; Streamable HTTP, SSE 없음. - 스킬 — d4에서
skills/yetdapay-{protect,license,verify}추가 (yetdapay-install은 wave 이전 → 총 4개).
CLI (@yetdapay/cli 0.2.0)
- Protect 워크플로(
init/doctor/plan/review/apply/verify) 동작 변경 없음; d2에서 추가된 플랫폼 명령:auth login/status,project list/inspect,license status/verify,integration check(d3 이후 양쪽 백엔드). - 패키징:
npm pack→ vendored 툴킷 +license-server가 있는 72파일 tarball; tarball 설치 경로 설계됨, 설계상 private.
SDK
@yetdapay/license-web/-server/-nuxt0.1.0 — 팩 검증됨 (11/17/9 파일), 오늘file:설치 가능,createWorkerConfig()로 Worker 페어링(d1).@yetdapay/sdk0.1.0 — copy-in 소스 번들(core.ts + Vue/React 버튼);be-cloudflare엔드포인트는 d3 이후 존재.
문서
docs/에 루트된 VitePress 사이트(~55 페이지: getting-started, licensing, protection, payments, sdk, cli, mcp, api, examples, operations).pnpm build통과(§3 참조).- 업데이트된 제품 문서:
version-policy.md,release-artifacts.md,developer-platform-completion.md(이 파일),CHANGELOG.md, 루트README.md.
예제 (examples/run-all.sh)
- A
cli-protect— 임시 사본에서 init→doctor→plan→review→apply→ verify; APPLIED +EQUIVALENT+ 증거 레코드 어서션. Node 전용. - B
agent-mcp— protect 도구를 실행하는 MCP stdio 드라이버. Node 전용. - C
license-server—file:설치의@yetdapay/license-server+license-web클라이언트 흐름. Node 전용. - D
donation-site— 시드된 Axumbe/+ 실제sdk/core.ts호출 + 호스티드/h/<public_id>링크의nuxt3-siteSSR.cargo build+npm install필요(네트워크).
3. 테스트 합계 (실행된 증거)
| 스위트 | 결과 | 실행 위치 |
|---|---|---|
sdk/license/{web,server,nuxt} 단위 | 96 통과(30/51/15) — 이 워크트리에서 재실행 | 패키지당 node --test |
tools/devpay-mcp 프로토콜+CLI 테스트 | 6/6 통과 — 이 워크트리에서 재실행 | node --test(CI: yp-mcp 잡) |
tools/yp e2e | 6 케이스 | node --test(CI: product-suites) |
mcp/ Rust 서버 | 14 #[test] 케이스 | cargo test(CI: mcp 잡) |
mcp/gateway 테스트 | 10 node --test 케이스(mock 업스트림) | CI: mcp 잡 |
be-cloudflare 연동 스위트 | d5b 후 48 검사(d3 증거는 47; 44 check( 사이트 + 루프) | tests/run-integration.sh + wrangler dev |
| 영속 권한 E2E | 55 어서션(PAY/LIC/USE/REC/INBOX/OUTBOX) | tests/run-durable.sh(CI: product-suites) |
| SDK↔Worker 계약 | 10 검사 | e2e-worker.sh를 통한 sdk-worker-contract.test.mjs(CI: product-suites, d7) |
| auto-protection 스위트 | analyzer 61/61 포함 8 스위트 | */tests/run.mjs(CI: product-suites) |
| auto-protection 레드팀 아티팩트 | 13 검사 | CI: security-regression |
| 문서 빌드 | 이 워크트리에서 exit 0 | docs/에서 pnpm build(CI: docs-site 잡, d7) |
| 예제 스모크 | A–C Node 전용 레그 CI; D는 정직한 타임아웃 노트와 유지 | examples/run-all.sh(CI: examples 잡, d7) |
4. 남은 NOT_VERIFIED / BLOCKED 레지스터
| 항목 | 라벨 | 이유 |
|---|---|---|
| 게이트웨이 SSE / 스트리밍 전송 | NOT_IMPLEMENTED | 게이트웨이는 POST/JSON Streamable HTTP만 제공; SSE 엔드포인트 없음 |
React 라이선스 SDK 어댑터(@yetdapay/license-react 또는 동등) | NOT_IMPLEMENTED | sdk/react/는 커머스 버튼만; React/Next용 라이선스 어댑터 없음 |
| 호스티드 실행 | DESIGNED | 요구사항 문서만(hosted-execution-requirements.md); 런타임 없음 |
| Wire 계약 v2 | DESIGNED/연기 | aud/tenant_id 클레임, 오류 코드 수렴 — 매트릭스 §5에 기록; 오늘 협상 메커니즘 없음(v1은 암묵적) |
| 실제 PG 결제 | NOT_CONNECTED(charter) | 샌드박스 기부만; 실제 캡처 없음 — 절대 달리 주장 금지 |
| 이메일 전달 | NOT_IMPLEMENTED(charter) | mock 어댑터만; 프로바이더 미연동 |
| 배포 시크릿 / 프로덕션 배포 | BLOCKED(charter 게이트) | 명시적 사용자 승인 없이 wrangler deploy/시크릿 작업 금지 |
배포된 백엔드 왕복(@yetdapay/sdk, 게이트웨이 셀러 읽기) | NOT_VERIFIED | 모든 실행된 증거는 루프백 wrangler dev / 시드된 sqlite |
npm publish / 레지스트리 설치 | NOT_VERIFIED | 패키지는 설계상 미발행; file:/tgz 패턴이 대신 문서화됨 |
깨끗한 머신에서 yp tarball의 설치된 바이너리 스모크 | NOT_VERIFIED | 팩 내용 검증됨; 설치+실행은 이 wave에서 미실행 |
| Axum CI의 seller-ops 스펙 | NOT_VERIFIED(CI에서) | 스펙은 be/에서 자체 스킵(durable API 부재) — 로컬 wrangler dev에 대해서만 실행됨 |
| 규모에서의 멀티 인스턴스 D1 경합 | NOT_VERIFIED | 2 인스턴스 dedup 정확히 1 유지; 패자는 clean 409가 아닌 500 표면화(F-04) |
5. 릴리스 권고
pre-1.0 개발자 플랫폼 드롭(팩 + 문서 + 예제 + CI 통합)의 기술 준비: 예, §4 레지스터를 모든 릴리스 노트에 첨부하는 조건. 이 wave의 어떤 것도 레지스트리 발행, 배포, 실제 결제/이메일 주장을 승인하지 않습니다 — 그것들은 charter에 따라 PM/사용자 게이트로 남습니다.