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
@@ -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 }