docs: say what a product must inject to use the V2 transport

RuntimeHttpContract는 슬롯 네 개를 명시한 주입 지점인데, 그 슬롯이 비어
있다는 사실과 비운 채 되돌리면 모든 요청이 실패한다는 사실이 코드 어디에도
없었다. V3는 설치된 feature 계약에서 오퍼레이션을 받으므로 이 슬롯과
무관하다는 것도 함께 적는다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
DongHyeonka
2026-09-16 18:58:36 +09:00
co-authored by Claude Opus 5
parent 7756856bb2
commit 5d9ad4f74a
2 changed files with 20 additions and 2 deletions
+5 -2
View File
@@ -23,8 +23,11 @@ export {
export type { CredentialPatchOutcome } from "./http-contract-bridge.ts";
/**
* V2 legacy. operationId + `LegacyHttpInput`으로 호출하는 범용 클라이언트다.
* 새 코드는 위의 V3 실행기를 쓴다. 남아 있는 이유는 계약이 아직 없는
* 오퍼레이션을 위한 이행 경로이기 때문이다.
* 새 코드는 위의 V3 실행기를 쓴다.
*
* 이 템플릿은 V2의 오퍼레이션 레지스트리와 payload 매퍼를 비워서 출하한다.
* 제품이 `RuntimeHttpContract`(`src/bootstrap/runtime-adapters.ts`)의 네
* 슬롯을 주입해야 동작한다 — 주입 없이 V3에서 되돌리면 모든 요청이 실패한다.
*/
export {
createHttpClient,
+15
View File
@@ -63,6 +63,21 @@ import {
} from "../contracts/query-invalidation.ts";
type HttpClientDependencies = Parameters<typeof createHttpClient>[0];
/**
* 제품이 V2 전송을 쓰려면 채워야 하는 슬롯 네 개.
*
* 이 템플릿은 넷 다 비워서 출하한다. 기본값인
* `contracts/api-operations.ts`의 `API_OPERATIONS`는 빈 객체이고
* `adapters/http/resource-mapper.ts`의 `mapOperationPayload`는 항상
* `MAPPING_INVARIANT_REJECTED`를 반환한다. 그래서 **이 레포 상태 그대로는
* V2로 어떤 오퍼레이션도 실행되지 않는다** — 그건 결함이 아니라 제품이
* 채우는 자리다.
*
* V2를 rollback/compatibility 경로로 쓰려는 제품은 이 네 슬롯을 주입해야
* 한다. 주입하지 않은 채 V3에서 되돌리면 모든 요청이 실패한다.
* V3(`createContractHttpExecutor`)는 설치된 feature 계약에서 오퍼레이션을
* 받으므로 이 슬롯과 무관하게 동작한다.
*/
export type RuntimeHttpContract = Pick<
HttpClientDependencies,
"getOperation" | "validatePayload" | "validateRequest" | "mapPayload"