contract: discriminator enum 정정 반영해 studio 계약 재생성

design-package d170392이 discriminator 판별 필드를 const에서 단일값
enum으로 바꿨다(wire 의미 동일, openapi-generator 7.18.0의
discriminator+const NPE를 피하려는 정정). vendor된 계약과 생성 타입을
다시 맞춘다. 실질적인 리터럴 타입은 그대로다 — JSDoc 태그만
@constant에서 @enum {string}으로 바뀌었다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
DongHyeonka
2026-08-18 22:32:32 +09:00
co-authored by Claude Opus 5
parent d23a18f659
commit 9244f5c15d
3 changed files with 45 additions and 45 deletions
@@ -1,8 +1,8 @@
{
"packageId": "@tech-log/studio-contract",
"version": "3.0.0",
"digest": "sha256:25ed2e9f5b76bfeacf66e5a84ea8daf05979faa0b54e4980781f02115bbf0627",
"sourceRevision": "3e8a164",
"digest": "sha256:8ec2170ccdb27bd7ef29b46d732527987cf69d2c9818f7fe1943cb4d12b0dde4",
"sourceRevision": "d170392",
"operationIds": [
"getStudioSession",
"getStudioDashboard",
@@ -588,7 +588,7 @@ export interface components {
relations: components["schemas"]["RelationInput"][];
};
CaseInput: components["schemas"]["WorkingCopyInputBase"] & {
/** @constant */
/** @enum {string} */
kind: "CASE";
problem: string;
conclusion: string;
@@ -608,7 +608,7 @@ export interface components {
kind: "CASE";
};
ReferenceInput: components["schemas"]["WorkingCopyInputBase"] & {
/** @constant */
/** @enum {string} */
kind: "REFERENCE";
purpose: string;
rules: components["schemas"]["ReferenceRule"][];
@@ -625,7 +625,7 @@ export interface components {
kind: "REFERENCE";
};
QuestionInput: components["schemas"]["WorkingCopyInputBase"] & {
/** @constant */
/** @enum {string} */
kind: "QUESTION";
/**
* @description Backend Inquiry lifecycle의 축약 view다.
@@ -652,7 +652,7 @@ export interface components {
kind: "QUESTION";
};
ProjectDecisionInput: components["schemas"]["WorkingCopyInputBase"] & {
/** @constant */
/** @enum {string} */
kind: "PROJECT_DECISION";
/**
* @description UI 용어다. Backend Domain의 `ACCEPTED`/`ADOPTED` 명칭이 다르면
@@ -687,7 +687,7 @@ export interface components {
updatedAt: string;
};
CaseWorkingCopy: components["schemas"]["WorkingCopyBase"] & {
/** @constant */
/** @enum {string} */
kind: "CASE";
problem: string;
conclusion: string;
@@ -704,7 +704,7 @@ export interface components {
kind: "CASE";
};
ReferenceWorkingCopy: components["schemas"]["WorkingCopyBase"] & {
/** @constant */
/** @enum {string} */
kind: "REFERENCE";
purpose: string;
rules: components["schemas"]["ReferenceRule"][];
@@ -721,7 +721,7 @@ export interface components {
kind: "REFERENCE";
};
QuestionWorkingCopy: components["schemas"]["WorkingCopyBase"] & {
/** @constant */
/** @enum {string} */
kind: "QUESTION";
/** @enum {string|null} */
questionStatus: "OPEN" | "RESOLVED" | null;
@@ -740,7 +740,7 @@ export interface components {
kind: "QUESTION";
};
ProjectDecisionWorkingCopy: components["schemas"]["WorkingCopyBase"] & {
/** @constant */
/** @enum {string} */
kind: "PROJECT_DECISION";
/** @enum {string|null} */
decisionStatus: "PROPOSED" | "ADOPTED" | null;
@@ -911,7 +911,7 @@ export interface components {
};
Inline: components["schemas"]["InlineText"] | components["schemas"]["InlineEmphasis"] | components["schemas"]["InlineStrong"] | components["schemas"]["InlineCode"] | components["schemas"]["InlineLink"] | components["schemas"]["InlineStatus"];
InlineEmphasis: components["schemas"]["InlineContainer"] & {
/** @constant */
/** @enum {string} */
type?: "EMPHASIS";
} & {
/**
@@ -921,7 +921,7 @@ export interface components {
type: "EMPHASIS";
};
InlineStrong: components["schemas"]["InlineContainer"] & {
/** @constant */
/** @enum {string} */
type?: "STRONG";
} & {
/**
@@ -966,7 +966,7 @@ export interface components {
items: components["schemas"]["ListItem"][];
};
UnorderedListBlock: components["schemas"]["ListBlockBase"] & {
/** @constant */
/** @enum {string} */
type?: "UNORDERED_LIST";
} & {
/**
@@ -976,7 +976,7 @@ export interface components {
type: "UNORDERED_LIST";
};
OrderedListBlock: components["schemas"]["ListBlockBase"] & {
/** @constant */
/** @enum {string} */
type?: "ORDERED_LIST";
} & {
/**
@@ -1074,7 +1074,7 @@ export interface components {
};
CaseRenderBlock: components["schemas"]["HeadingBlock"] | components["schemas"]["ParagraphBlock"] | components["schemas"]["BlockquoteBlock"] | components["schemas"]["UnorderedListBlock"] | components["schemas"]["OrderedListBlock"] | components["schemas"]["CodeBlock"] | components["schemas"]["DataTableBlock"] | components["schemas"]["CalloutBlock"] | components["schemas"]["EvidenceFigureBlock"];
CasePublicRenderModel: components["schemas"]["PublicRenderModelBase"] & {
/** @constant */
/** @enum {string} */
kind: "CASE";
problem: string;
conclusion: string;
@@ -1091,7 +1091,7 @@ export interface components {
kind: "CASE";
};
ReferencePublicRenderModel: components["schemas"]["PublicRenderModelBase"] & {
/** @constant */
/** @enum {string} */
kind: "REFERENCE";
purpose: string;
rules: components["schemas"]["ReferenceRule"][];
@@ -1113,7 +1113,7 @@ export interface components {
linkLabel: string;
};
QuestionPublicRenderModel: components["schemas"]["PublicRenderModelBase"] & {
/** @constant */
/** @enum {string} */
kind: "QUESTION";
/**
* @description 공개 표현용 축약 상태다. Domain의 `INVESTIGATING`/`PAUSED`는 `OPEN`으로 표현된다.
@@ -1135,7 +1135,7 @@ export interface components {
kind: "QUESTION";
};
ProjectDecisionPublicRenderModel: components["schemas"]["PublicRenderModelBase"] & {
/** @constant */
/** @enum {string} */
kind: "PROJECT_DECISION";
/** @enum {string} */
status: "PROPOSED" | "ADOPTED";
@@ -928,7 +928,7 @@ components:
- type: object
required: [kind, problem, conclusion, environment, reproduction, lastVerifiedOn, bodyMarkdown]
properties:
kind: { type: string, const: CASE }
kind: { type: string, enum: [CASE] }
problem: { type: string, maxLength: 100000 }
conclusion: { type: string, maxLength: 100000 }
environment: { type: string, maxLength: 100000 }
@@ -947,7 +947,7 @@ components:
- type: object
required: [kind, purpose, rules, applyWhen, exceptions, examples, verifiedOn]
properties:
kind: { type: string, const: REFERENCE }
kind: { type: string, enum: [REFERENCE] }
purpose: { type: string, maxLength: 100000 }
rules: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/ReferenceRule" } }
applyWhen: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/OrderedText" } }
@@ -961,7 +961,7 @@ components:
- type: object
required: [kind, questionStatus, facts, assumptions, unknowns, constraints, options, nextValidation, resolution]
properties:
kind: { type: string, const: QUESTION }
kind: { type: string, enum: [QUESTION] }
questionStatus:
type: [string, "null"]
enum: [OPEN, RESOLVED, null]
@@ -988,7 +988,7 @@ components:
- type: object
required: [kind, decisionStatus, decidedOn, statement, rationale, consequences]
properties:
kind: { type: string, const: PROJECT_DECISION }
kind: { type: string, enum: [PROJECT_DECISION] }
decisionStatus:
type: [string, "null"]
enum: [PROPOSED, ADOPTED, null]
@@ -1035,7 +1035,7 @@ components:
- type: object
required: [kind, problem, conclusion, environment, reproduction, lastVerifiedOn, bodyMarkdown]
properties:
kind: { type: string, const: CASE }
kind: { type: string, enum: [CASE] }
problem: { type: string, maxLength: 100000 }
conclusion: { type: string, maxLength: 100000 }
environment: { type: string, maxLength: 100000 }
@@ -1049,7 +1049,7 @@ components:
- type: object
required: [kind, purpose, rules, applyWhen, exceptions, examples, verifiedOn]
properties:
kind: { type: string, const: REFERENCE }
kind: { type: string, enum: [REFERENCE] }
purpose: { type: string, maxLength: 100000 }
rules: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/ReferenceRule" } }
applyWhen: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/OrderedText" } }
@@ -1063,7 +1063,7 @@ components:
- type: object
required: [kind, questionStatus, facts, assumptions, unknowns, constraints, options, nextValidation, resolution]
properties:
kind: { type: string, const: QUESTION }
kind: { type: string, enum: [QUESTION] }
questionStatus: { type: [string, "null"], enum: [OPEN, RESOLVED, null] }
facts: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/OrderedText" } }
assumptions: { type: array, maxItems: 50, items: { $ref: "#/components/schemas/OrderedText" } }
@@ -1082,7 +1082,7 @@ components:
- type: object
required: [kind, decisionStatus, decidedOn, statement, rationale, consequences]
properties:
kind: { type: string, const: PROJECT_DECISION }
kind: { type: string, enum: [PROJECT_DECISION] }
decisionStatus: { type: [string, "null"], enum: [PROPOSED, ADOPTED, null] }
decidedOn: { type: [string, "null"], format: date }
statement: { type: string, maxLength: 100000 }
@@ -1251,7 +1251,7 @@ components:
additionalProperties: false
required: [type, text]
properties:
type: { type: string, const: TEXT }
type: { type: string, enum: [TEXT] }
text: { type: string, minLength: 1, maxLength: 100000 }
InlineContainer:
type: object
@@ -1264,14 +1264,14 @@ components:
additionalProperties: false
required: [type, code]
properties:
type: { type: string, const: INLINE_CODE }
type: { type: string, enum: [INLINE_CODE] }
code: { type: string, minLength: 1, maxLength: 100000 }
InlineLink:
type: object
additionalProperties: false
required: [type, label, href]
properties:
type: { type: string, const: LINK }
type: { type: string, enum: [LINK] }
label: { type: string, minLength: 1, maxLength: 100000 }
href: { type: string, format: uri, maxLength: 2000 }
InlineStatus:
@@ -1279,7 +1279,7 @@ components:
additionalProperties: false
required: [type, label, tone]
properties:
type: { type: string, const: STATUS }
type: { type: string, enum: [STATUS] }
label: { type: string, minLength: 1, maxLength: 120 }
tone: { type: string, enum: [warning, evidence, neutral] }
Inline:
@@ -1303,18 +1303,18 @@ components:
unevaluatedProperties: false
allOf:
- { $ref: "#/components/schemas/InlineContainer" }
- { type: object, properties: { type: { type: string, const: EMPHASIS } } }
- { type: object, properties: { type: { type: string, enum: [EMPHASIS] } } }
InlineStrong:
unevaluatedProperties: false
allOf:
- { $ref: "#/components/schemas/InlineContainer" }
- { type: object, properties: { type: { type: string, const: STRONG } } }
- { type: object, properties: { type: { type: string, enum: [STRONG] } } }
HeadingBlock:
type: object
additionalProperties: false
required: [type, id, level, content]
properties:
type: { type: string, const: HEADING }
type: { type: string, enum: [HEADING] }
id: { type: string, minLength: 1, maxLength: 200 }
level: { type: integer, minimum: 2, maximum: 4 }
content: { type: array, maxItems: 1000, items: { $ref: "#/components/schemas/Inline" } }
@@ -1323,14 +1323,14 @@ components:
additionalProperties: false
required: [type, content]
properties:
type: { type: string, const: PARAGRAPH }
type: { type: string, enum: [PARAGRAPH] }
content: { type: array, maxItems: 1000, items: { $ref: "#/components/schemas/Inline" } }
BlockquoteBlock:
type: object
additionalProperties: false
required: [type, content]
properties:
type: { type: string, const: BLOCKQUOTE }
type: { type: string, enum: [BLOCKQUOTE] }
content: { type: array, maxItems: 1000, items: { $ref: "#/components/schemas/Inline" } }
ListItem:
type: object
@@ -1349,18 +1349,18 @@ components:
unevaluatedProperties: false
allOf:
- { $ref: "#/components/schemas/ListBlockBase" }
- { type: object, properties: { type: { type: string, const: UNORDERED_LIST } } }
- { type: object, properties: { type: { type: string, enum: [UNORDERED_LIST] } } }
OrderedListBlock:
unevaluatedProperties: false
allOf:
- { $ref: "#/components/schemas/ListBlockBase" }
- { type: object, properties: { type: { type: string, const: ORDERED_LIST } } }
- { type: object, properties: { type: { type: string, enum: [ORDERED_LIST] } } }
CodeBlock:
type: object
additionalProperties: false
required: [type, code, language, label]
properties:
type: { type: string, const: CODE_BLOCK }
type: { type: string, enum: [CODE_BLOCK] }
code: { type: string, maxLength: 100000 }
language: { type: [string, "null"], maxLength: 100 }
label: { type: [string, "null"], maxLength: 200 }
@@ -1391,7 +1391,7 @@ components:
additionalProperties: false
required: [type, id, caption, rowHeaderColumn, columns, rows]
properties:
type: { type: string, const: DATA_TABLE }
type: { type: string, enum: [DATA_TABLE] }
id: { type: string, minLength: 1, maxLength: 200 }
caption: { type: string, maxLength: 1000 }
rowHeaderColumn: { type: [integer, "null"], minimum: 1 }
@@ -1402,7 +1402,7 @@ components:
additionalProperties: false
required: [type, tone, label, content]
properties:
type: { type: string, const: CALLOUT }
type: { type: string, enum: [CALLOUT] }
tone: { type: string, enum: [warning, info] }
label: { type: string, maxLength: 200 }
content: { type: array, maxItems: 1000, items: { $ref: "#/components/schemas/Inline" } }
@@ -1425,7 +1425,7 @@ components:
Asset decorative=true → alt="" 허용
```
properties:
type: { type: string, const: EVIDENCE_FIGURE }
type: { type: string, enum: [EVIDENCE_FIGURE] }
key: { type: string, minLength: 1, maxLength: 200 }
alt: { type: string, maxLength: 1000 }
caption: { type: string, maxLength: 1000 }
@@ -1477,7 +1477,7 @@ components:
- type: object
required: [kind, problem, conclusion, environment, reproduction, lastVerifiedOn, bodyBlocks]
properties:
kind: { type: string, const: CASE }
kind: { type: string, enum: [CASE] }
problem: { type: string, minLength: 1, maxLength: 100000 }
conclusion: { type: string, minLength: 1, maxLength: 100000 }
environment: { type: string, maxLength: 100000 }
@@ -1491,7 +1491,7 @@ components:
- type: object
required: [kind, purpose, rules, applyWhen, exceptions, examples, verifiedOn]
properties:
kind: { type: string, const: REFERENCE }
kind: { type: string, enum: [REFERENCE] }
purpose: { type: string, minLength: 1, maxLength: 100000 }
rules: { type: array, minItems: 1, maxItems: 50, items: { $ref: "#/components/schemas/ReferenceRule" } }
applyWhen: { type: array, minItems: 1, maxItems: 50, items: { $ref: "#/components/schemas/OrderedText" } }
@@ -1513,7 +1513,7 @@ components:
- type: object
required: [kind, status, facts, assumptions, unknowns, constraints, options, nextValidation, resolution]
properties:
kind: { type: string, const: QUESTION }
kind: { type: string, enum: [QUESTION] }
status:
type: string
enum: [OPEN, RESOLVED]
@@ -1535,7 +1535,7 @@ components:
- type: object
required: [kind, status, decidedOn, statement, rationale, consequences]
properties:
kind: { type: string, const: PROJECT_DECISION }
kind: { type: string, enum: [PROJECT_DECISION] }
status: { type: string, enum: [PROPOSED, ADOPTED] }
decidedOn: { type: string, format: date }
statement: { type: string, minLength: 1, maxLength: 100000 }